ASP.NET 图片上传工具类 upload image简单好用功能齐全

发布时间:2017-7-9 7:17:20编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"ASP.NET 图片上传工具类 upload image简单好用功能齐全 ",主要涉及到ASP.NET 图片上传工具类 upload image简单好用功能齐全 方面的内容,对于ASP.NET 图片上传工具类 upload image简单好用功能齐全 感兴趣的同学可以参考一下。

使用方法:

UploadImage ui = new UploadImage();           /***可选参数***/           ui.SetWordWater = "哈哈";//文字水印          // ui.SetPicWater = Server.MapPath("2.png");//图片水印(图片和文字都赋值图片有效)          ui.SetPositionWater = 4;//水印图片的位置 0居中、1左上角、2右上角、3左下角、4右下角           ui.SetSmallImgHeight = "110,40,20";//设置缩略图可以多个          ui.SetSmallImgWidth = "100,40,20";           //保存图片生成缩略图          var reponseMessage = ui.FileSaveAs(Request.Files[0], Server.MapPath("~/file/temp"));           //裁剪图片          var reponseMessage2 = ui.FileCutSaveAs(Request.Files[0], Server.MapPath("~/file/temp2"), 400, 300, UploadImage.CutMode.CutNo);              /***返回信息***/          var isError = reponseMessage.IsError;//是否异常          var webPath = reponseMessage.WebPath;//web路径          var filePath = reponseMessage.filePath;//物理路径          var message = reponseMessage.Message;//错误信息          var directory = reponseMessage.Directory;//目录          var smallPath1 = reponseMessage.SmallPath(0);//缩略图路径1          var smallPath2 = reponseMessage.SmallPath(1);//缩略图路径2          var smallPath3 = reponseMessage.SmallPath(2);//缩略图路径3

类:

using System;using System.Collections.Generic;using System.Text;using System.IO;using System.Web;using System.Drawing;using System.Drawing.Imaging;using System.Drawing.Drawing2D;using System.Collections;using System.Net;using System.Text.RegularExpressions;using System.Configuration; namespace SyntacticSugar{    /// <summary>    /// ** 描述:图片上传类、支持水印、缩略图    /// ** 创始时间:2015-5-28    /// ** 修改时间:-    /// ** 修改人:sunkaixuan    /// ** 使用说明:http://www.cnblogs.com/sunkaixuan/p/4536626.html    /// </summary>    public class UploadImage    {         #region 属性        /// <summary>        /// 允许图片格式        /// </summary>        public string SetAllowFormat { get; set; }        /// <summary>        /// 允许上传图片大小        /// </summary>        public double SetAllowSize { get; set; }        /// <summary>        /// 文字水印字符        /// </summary>        public string SetWordWater { get; set; }        /// <summary>        /// 图片水印        /// </summary>        public string SetPicWater { get; set; }        /// <summary>        /// 水印图片的位置 0居中、1左上角、2右上角、3左下角、4右下角        /// </summary>        public int SetPositionWater { get; set; }        /// <summary>        /// 缩略图宽度多个逗号格开(例如:200,100)        /// </summary>        public string SetSmallImgWidth { get; set; }        /// <summary>        /// 缩略图高度多个逗号格开(例如:200,100)        /// </summary>        public string SetSmallImgHeight { get; set; }        /// <summary>        /// 是否限制最大宽度,默认为true        /// </summary>        public bool SetLimitWidth { get; set; }        /// <summary>        /// 最大宽度尺寸,默认为600        /// </summary>        public int SetMaxWidth { get; set; }        /// <summary>        /// 是否剪裁图片,默认true        /// </summary>        public bool SetCutImage { get; set; }        /// <summary>        /// 限制图片最小宽度,0表示不限制        /// </summary>        public int SetMinWidth { get; set; }         #endregion         public UploadImage()        {            SetAllowFormat = ".jpeg|.jpg|.bmp|.gif|.png";   //允许图片格式            SetAllowSize = 1;       //允许上传图片大小,默认为1MB            SetPositionWater = 4;            SetCutImage = true;        }           #region main method          /// <summary>        /// 裁剪图片        /// </summary>        /// <param name="PostedFile">HttpPostedFile控件</param>        /// <param name="SavePath">保存路径【sys.config配置路径】</param>        /// <param name="oImgWidth">图片宽度</param>        /// <param name="oImgHeight">图片高度</param>        /// <param name="cMode">剪切类型</param>        /// <param name="ext">返回格式</param>        /// <returns>返回上传信息</returns>        public ResponseMessage FileCutSaveAs(System.Web.HttpPostedFile PostedFile, string SavePath, int oImgWidth, int oImgHeight, CutMode cMode)        {            ResponseMessage rm = new ResponseMessage();            try            {                //获取上传文件的扩展名                string sEx = System.IO.Path.GetExtension(PostedFile.FileName);                if (!CheckValidExt(SetAllowFormat, sEx))                {                    TryError(rm, 2);                    return rm;                }                 //获取上传文件的大小                double PostFileSize = PostedFile.ContentLength / 1024.0 / 1024.0;                 if (PostFileSize > SetAllowSize)                {                    TryError(rm, 3);                    return rm;  //超过文件上传大小                }                if (!System.IO.Directory.Exists(SavePath))                {                    System.IO.Directory.CreateDirectory(SavePath);                }                //重命名名称                string NewfileName = DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString() + DateTime.Now.Millisecond.ToString("000");                string fName = "s" + NewfileName + sEx;                string fullPath = Path.Combine(SavePath, fName);                PostedFile.SaveAs(fullPath);                 //重命名名称                string sNewfileName = DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString() + DateTime.Now.Millisecond.ToString("000");                string sFName = sNewfileName + sEx;                rm.IsError = false;                rm.FileName = sFName;                string sFullPath = Path.Combine(SavePath, sFName);                rm.filePath = sFullPath;                rm.WebPath = "/"+sFullPath.Replace(HttpContext.Current.Server.MapPath("~/"), "").Replace("\\", "/");                CreateSmallPhoto(fullPath, oImgWidth, oImgHeight, sFullPath, SetPicWater, SetWordWater, cMode);                if (File.Exists(fullPath))                {                    File.Delete(fullPath);                }                //压缩                if (PostFileSize > 100)                {                    CompressPhoto(sFullPath, 100);                }            }            catch (Exception ex)            {                TryError(rm, ex.Message);            }            return rm;        }           /// <summary>        /// 通用图片上传类        /// </summary>        /// <param name="PostedFile">HttpPostedFile控件</param>        /// <param name="SavePath">保存路径【sys.config配置路径】</param>        /// <param name="finame">返回文件名</param>        /// <param name="fisize">返回文件大小</param>        /// <returns>返回上传信息</returns>        public ResponseMessage FileSaveAs(System.Web.HttpPostedFile PostedFile, string SavePath)        {            ResponseMessage rm = new ResponseMessage();            try            {                if (string.IsNullOrEmpty(PostedFile.FileName))                {                    TryError(rm, 4);                    return rm;                }                 Random rd = new Random();                int rdInt = rd.Next(1000, 9999);                //重命名名称                string NewfileName = DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString() + DateTime.Now.Millisecond.ToString() + rdInt;                 //获取上传文件的扩展名                string sEx = System.IO.Path.GetExtension(PostedFile.FileName);                if (!CheckValidExt(SetAllowFormat, sEx))                {                    TryError(rm, 2);                    return rm;                }                 //获取上传文件的大小                double PostFileSize = PostedFile.ContentLength / 1024.0 / 1024.0;                 if (PostFileSize > SetAllowSize)                {                    TryError(rm, 3);                    return rm;                }                  if (!System.IO.Directory.Exists(SavePath))                {                    System.IO.Directory.CreateDirectory(SavePath);                }                 rm.FileName = NewfileName + sEx;                string fullPath = SavePath.Trim('\\') + "\\" + rm.FileName;                rm.WebPath = "/"+fullPath.Replace(HttpContext.Current.Server.MapPath("~/"), "").Replace("\\", "/");                rm.filePath = fullPath;                rm.Size = PostFileSize;                PostedFile.SaveAs(fullPath);                  System.Drawing.Bitmap bmp = new Bitmap(fullPath);                int realWidth = bmp.Width;                int realHeight = bmp.Height;                bmp.Dispose();                 #region 检测图片宽度限制                if (SetMinWidth > 0)                {                    if (realWidth < SetMinWidth)                    {                        TryError(rm, 7);                        return rm;                    }                }                #endregion                 #region 监测图片宽度是否超过600,超过的话,自动压缩到600                if (SetLimitWidth && realWidth > SetMaxWidth)                {                    int mWidth = SetMaxWidth;                    int mHeight = mWidth * realHeight / realWidth;                     string tempFile = SavePath + Guid.NewGuid().ToString() + sEx;                    File.Move(fullPath, tempFile);                    CreateSmallPhoto(tempFile, mWidth, mHeight, fullPath, "", "");                    File.Delete(tempFile);                }                #endregion                 #region 压缩图片存储尺寸                if (sEx.ToLower() != ".gif")                {                    CompressPhoto(fullPath, 100);                }                #endregion                   //生成缩略图片高宽                if (string.IsNullOrEmpty(SetSmallImgWidth))                {                    rm.Message = "上传成功,无缩略图";                    return rm;                }                  string[] oWidthArray = SetSmallImgWidth.Split(',');                string[] oHeightArray = SetSmallImgHeight.Split(',');                if (oWidthArray.Length != oHeightArray.Length)                {                    TryError(rm, 6);                    return rm;                }                  for (int i = 0; i < oWidthArray.Length; i++)                {                    if (Convert.ToInt32(oWidthArray[i]) <= 0 || Convert.ToInt32(oHeightArray[i]) <= 0)                        continue;                     string sImg = SavePath.TrimEnd('\\') + '\\' + NewfileName + "_" + i.ToString() + sEx;                     //判断图片高宽是否大于生成高宽。否则用原图                    if (realWidth > Convert.ToInt32(oWidthArray[i]))                    {                        if (SetCutImage)                            CreateSmallPhoto(fullPath, Convert.ToInt32(oWidthArray[i]), Convert.ToInt32(oHeightArray[i]), sImg, "", "");                        else                            CreateSmallPhoto(fullPath, Convert.ToInt32(oWidthArray[i]), Convert.ToInt32(oHeightArray[i]), sImg, "", "", CutMode.CutNo);                    }                    else                    {                        if (SetCutImage)                            CreateSmallPhoto(fullPath, realWidth, realHeight, sImg, "", "");                        else                            CreateSmallPhoto(fullPath, realWidth, realHeight, sImg, "", "", CutMode.CutNo);                    }                }                 #region 给大图添加水印                if (!string.IsNullOrEmpty(SetPicWater))                    AttachPng(SetPicWater, fullPath);                else if (!string.IsNullOrEmpty(SetWordWater))                    AttachText(SetWordWater, fullPath);                #endregion              }            catch (Exception ex)            {                TryError(rm, ex.Message);            }            return rm;        }         #region 验证格式        /// <summary>        /// 验证格式        /// </summary>        /// <param name="allType">所有格式</param>        /// <param name="chkType">被检查的格式</param>        /// <returns>bool</returns>        public bool CheckValidExt(string allType, string chkType)        {            bool flag = false;            string[] sArray = allType.Split('|');            foreach (string temp in sArray)            {                if (temp.ToLower() == chkType.ToLower())                {                    flag = true;                    break;                }            }             return flag;        }        #endregion         #region 根据需要的图片尺寸,按比例剪裁原始图片        /// <summary>        /// 根据需要的图片尺寸,按比例剪裁原始图片        /// </summary>        /// <param name="nWidth">缩略图宽度</param>        /// <param name="nHeight">缩略图高度</param>        /// <param name="img">原始图片</param>        /// <returns>剪裁区域尺寸</returns>        public Size CutRegion(int nWidth, int nHeight, Image img)        {            double width = 0.0;            double height = 0.0;             double nw = (double)nWidth;            double nh = (double)nHeight;             double pw = (double)img.Width;            double ph = (double)img.Height;             if (nw / nh > pw / ph)            {                width = pw;                height = pw * nh / nw;            }            else if (nw / nh < pw / ph)            {                width = ph * nw / nh;                height = ph;            }            else            {                width = pw;                height = ph;            }             return new Size(Convert.ToInt32(width), Convert.ToInt32(height));        }        #endregion         #region 等比例缩小图片        public Size NewSize(int nWidth, int nHeight, Image img)        {            double w = 0.0;            double h = 0.0;            double sw = Convert.ToDouble(img.Width);            double sh = Convert.ToDouble(img.Height);            double mw = Convert.ToDouble(nWidth);            double mh = Convert.ToDouble(nHeight);             if (sw < mw && sh < mh)            {                w = sw;                h = sh;            }            else if ((sw / sh) > (mw / mh))            {                w = nWidth;                h = (w * sh) / sw;            }            else            {                h = nHeight;                w = (h * sw) / sh;            }             return new Size(Convert.ToInt32(w), Convert.ToInt32(h));        }        #endregion         #region 生成缩略图         #region 生成缩略图,不加水印        /// <summary>        /// 生成缩略图,不加水印        /// </summary>        /// <param name="filename">源文件</param>        /// <param name="nWidth">缩略图宽度</param>        /// <param name="nHeight">缩略图高度</param>        /// <param name="destfile">缩略图保存位置</param>        public void CreateSmallPhoto(string filename, int nWidth, int nHeight, string destfile)        {            Image img = Image.FromFile(filename);            ImageFormat thisFormat = img.RawFormat;             Size CutSize = CutRegion(nWidth, nHeight, img);            Bitmap outBmp = new Bitmap(nWidth, nHeight);            Graphics g = Graphics.FromImage(outBmp);             // 设置画布的描绘质量            g.CompositingQuality = CompositingQuality.HighQuality;            g.SmoothingMode = SmoothingMode.HighQuality;            g.InterpolationMode = InterpolationMode.HighQualityBicubic;             int nStartX = (img.Width - CutSize.Width) / 2;            int nStartY = (img.Height - CutSize.Height) / 2;             g.DrawImage(img, new Rectangle(0, 0, nWidth, nHeight),                nStartX, nStartY, CutSize.Width, CutSize.Height, GraphicsUnit.Pixel);            g.Dispose();             //if (thisFormat.Equals(ImageFormat.Gif))            //{            //    Response.ContentType = "image/gif";            //}            //else            //{            //    Response.ContentType = "image/jpeg";            //}             // 以下代码为保存图片时,设置压缩质量            EncoderParameters encoderParams = new EncoderParameters();            long[] quality = new long[1];            quality[0] = 100;             EncoderParameter encoderParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);            encoderParams.Param[0] = encoderParam;             //获得包含有关内置图像编码解码器的信息的ImageCodecInfo 对象。            ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders();            ImageCodecInfo jpegICI = null;            for (int x = 0; x < arrayICI.Length; x++)            {                if (arrayICI[x].FormatDescription.Equals("JPEG"))                {                    jpegICI = arrayICI[x];//设置JPEG编码                    break;                }            }             if (jpegICI != null)            {                //outBmp.Save(Response.OutputStream, jpegICI, encoderParams);                outBmp.Save(destfile, jpegICI, encoderParams);            }            else            {                //outBmp.Save(Response.OutputStream, thisFormat);                outBmp.Save(destfile, thisFormat);            }             img.Dispose();            outBmp.Dispose();        }        #endregion         #region 生成缩略图,加水印        public void CreateSmallPhoto(string filename, int nWidth, int nHeight, string destfile, string sy, int nType)        {            if (nType == 0)                CreateSmallPhoto(filename, nWidth, nHeight, destfile, sy, "");            else                CreateSmallPhoto(filename, nWidth, nHeight, destfile, "", sy);        }        #endregion         #region 生成缩略图        /// <summary>        /// 生成缩略图        /// </summary>        /// <param name="filename">源文件</param>        /// <param name="nWidth">缩略图宽度</param>        /// <param name="nHeight">缩略图高度</param>        /// <param name="destfile">缩略图保存位置</param>        /// <param name="png">图片水印</param>        /// <param name="text">文本水印</param>        public void CreateSmallPhoto(string filename, int nWidth, int nHeight, string destfile, string png, string text)        {            Image img = Image.FromFile(filename);            ImageFormat thisFormat = img.RawFormat;             Size CutSize = CutRegion(nWidth, nHeight, img);            Bitmap outBmp = new Bitmap(nWidth, nHeight);            Graphics g = Graphics.FromImage(outBmp);            g.Clear(Color.White);             // 设置画布的描绘质量            g.CompositingQuality = CompositingQuality.HighQuality;            g.SmoothingMode = SmoothingMode.HighQuality;            g.InterpolationMode = InterpolationMode.HighQualityBicubic;             int nStartX = (img.Width - CutSize.Width) / 2;            int nStartY = (img.Height - CutSize.Height) / 2;             g.DrawImage(img, new Rectangle(0, 0, nWidth, nHeight),                nStartX, nStartY, CutSize.Width, CutSize.Height, GraphicsUnit.Pixel);            g.Dispose();             // 以下代码为保存图片时,设置压缩质量            EncoderParameters encoderParams = new EncoderParameters();            long[] quality = new long[1];            quality[0] = 100;             EncoderParameter encoderParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);            encoderParams.Param[0] = encoderParam;             //获得包含有关内置图像编码解码器的信息的ImageCodecInfo 对象。            ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders();            ImageCodecInfo jpegICI = null;            for (int x = 0; x < arrayICI.Length; x++)            {                if (arrayICI[x].FormatDescription.Equals("JPEG"))                {                    jpegICI = arrayICI[x];//设置JPEG编码                    break;                }            }             if (jpegICI != null)            {                outBmp.Save(destfile, jpegICI, encoderParams);            }            else            {                outBmp.Save(destfile, thisFormat);            }             img.Dispose();            outBmp.Dispose();             if (!string.IsNullOrEmpty(png))                AttachPng(png, destfile);             if (!string.IsNullOrEmpty(text))                AttachText(text, destfile);        }          public void CreateSmallPhoto(string filename, int nWidth, int nHeight, string destfile, string png, string text, CutMode cMode)        {            Image img = Image.FromFile(filename);             if (nWidth <= 0)                nWidth = img.Width;            if (nHeight <= 0)                nHeight = img.Height;             int towidth = nWidth;            int toheight = nHeight;             switch (cMode)            {                case CutMode.CutWH://指定高宽缩放(可能变形)                                  break;                case CutMode.CutW://指定宽,高按比例                                      toheight = img.Height * nWidth / img.Width;                    break;                case CutMode.CutH://指定高,宽按比例                    towidth = img.Width * nHeight / img.Height;                    break;                case CutMode.CutNo: //缩放不剪裁                    int maxSize = (nWidth >= nHeight ? nWidth : nHeight);                    if (img.Width >= img.Height)                    {                        towidth = maxSize;                        toheight = img.Height * maxSize / img.Width;                    }                    else                    {                        toheight = maxSize;                        towidth = img.Width * maxSize / img.Height;                    }                    break;                default:                    break;            }            nWidth = towidth;            nHeight = toheight;             ImageFormat thisFormat = img.RawFormat;             Size CutSize = new Size(nWidth, nHeight);            if (cMode != CutMode.CutNo)                CutSize = CutRegion(nWidth, nHeight, img);             Bitmap outBmp = new Bitmap(CutSize.Width, CutSize.Height);             Graphics g = Graphics.FromImage(outBmp);            g.Clear(Color.White);             // 设置画布的描绘质量            g.CompositingQuality = CompositingQuality.HighQuality;            g.SmoothingMode = SmoothingMode.HighQuality;            g.InterpolationMode = InterpolationMode.HighQualityBicubic;             int nStartX = (img.Width - CutSize.Width) / 2;            int nStartY = (img.Height - CutSize.Height) / 2;             //int x1 = (outBmp.Width - nWidth) / 2;            //int y1 = (outBmp.Height - nHeight) / 2;             if (cMode != CutMode.CutNo)                g.DrawImage(img, new Rectangle(0, 0, nWidth, nHeight),                    nStartX, nStartY, CutSize.Width, CutSize.Height, GraphicsUnit.Pixel);            else                g.DrawImage(img, new Rectangle(0, 0, nWidth, nHeight),                0, 0, img.Width, img.Height, GraphicsUnit.Pixel);            g.Dispose();             // 以下代码为保存图片时,设置压缩质量            EncoderParameters encoderParams = new EncoderParameters();            long[] quality = new long[1];            quality[0] = 100;             EncoderParameter encoderParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);            encoderParams.Param[0] = encoderParam;             //获得包含有关内置图像编码解码器的信息的ImageCodecInfo 对象。            ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders();            ImageCodecInfo jpegICI = null;            for (int x = 0; x < arrayICI.Length; x++)            {                if (arrayICI[x].FormatDescription.Equals("JPEG"))                {                    jpegICI = arrayICI[x];//设置JPEG编码                    break;                }            }             if (jpegICI != null)            {                outBmp.Save(destfile, jpegICI, encoderParams);            }            else            {                outBmp.Save(destfile, thisFormat);            }             img.Dispose();            outBmp.Dispose();             if (!string.IsNullOrEmpty(png))                AttachPng(png, destfile);             if (!string.IsNullOrEmpty(text))                AttachText(text, destfile);        }        #endregion         #endregion         #region 添加文字水印        public void AttachText(string text, string file)        {            if (string.IsNullOrEmpty(text))                return;             if (!System.IO.File.Exists(file))                return;             System.IO.FileInfo oFile = new System.IO.FileInfo(file);            string strTempFile = System.IO.Path.Combine(oFile.DirectoryName, Guid.NewGuid().ToString() + oFile.Extension);            oFile.CopyTo(strTempFile);             Image img = Image.FromFile(strTempFile);            ImageFormat thisFormat = img.RawFormat;             int nHeight = img.Height;            int nWidth = img.Width;             Bitmap outBmp = new Bitmap(nWidth, nHeight);            Graphics g = Graphics.FromImage(outBmp);            g.Clear(Color.White);             // 设置画布的描绘质量            g.CompositingQuality = CompositingQuality.HighQuality;            g.SmoothingMode = SmoothingMode.HighQuality;            g.InterpolationMode = InterpolationMode.HighQualityBicubic;             g.DrawImage(img, new Rectangle(0, 0, nWidth, nHeight),                0, 0, nWidth, nHeight, GraphicsUnit.Pixel);             int[] sizes = new int[] { 16, 14, 12, 10, 8, 6, 4 };             Font crFont = null;            SizeF crSize = new SizeF();             //通过循环这个数组,来选用不同的字体大小            //如果它的大小小于图像的宽度,就选用这个大小的字体            for (int i = 0; i < 7; i++)            {                //设置字体,这里是用arial,黑体                crFont = new Font("arial", sizes[i], FontStyle.Bold);                //Measure the Copyright string in this Font                crSize = g.MeasureString(text, crFont);                 if ((ushort)crSize.Width < (ushort)nWidth)                    break;            }             //因为图片的高度可能不尽相同, 所以定义了            //从图片底部算起预留了5%的空间            int yPixlesFromBottom = (int)(nHeight * .08);             //现在使用版权信息字符串的高度来确定要绘制的图像的字符串的y坐标             float yPosFromBottom = ((nHeight - yPixlesFromBottom) - (crSize.Height / 2));             //计算x坐标            float xCenterOfImg = (nWidth / 2);             //把文本布局设置为居中            StringFormat StrFormat = new StringFormat();            StrFormat.Alignment = StringAlignment.Center;             //通过Brush来设置黑色半透明            SolidBrush semiTransBrush2 = new SolidBrush(Color.FromArgb(153, 0, 0, 0));             //绘制版权字符串            g.DrawString(text,                 //版权字符串文本                crFont,                                   //字体                semiTransBrush2,                           //Brush                new PointF(xCenterOfImg + 1, yPosFromBottom + 1),  //位置                StrFormat);             //设置成白色半透明            SolidBrush semiTransBrush = new SolidBrush(Color.FromArgb(153, 255, 255, 255));             //第二次绘制版权字符串来创建阴影效果            //记住移动文本的位置1像素            g.DrawString(text,                 //版权文本                crFont,                                   //字体                semiTransBrush,                           //Brush                new PointF(xCenterOfImg, yPosFromBottom),  //位置                StrFormat);             g.Dispose();             // 以下代码为保存图片时,设置压缩质量            EncoderParameters encoderParams = new EncoderParameters();            long[] quality = new long[1];            quality[0] = 100;             EncoderParameter encoderParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);            encoderParams.Param[0] = encoderParam;             //获得包含有关内置图像编码解码器的信息的ImageCodecInfo 对象。            ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders();            ImageCodecInfo jpegICI = null;            for (int x = 0; x < arrayICI.Length; x++)            {                if (arrayICI[x].FormatDescription.Equals("JPEG"))                {                    jpegICI = arrayICI[x];//设置JPEG编码                    break;                }            }             if (jpegICI != null)            {                outBmp.Save(file, jpegICI, encoderParams);            }            else            {                outBmp.Save(file, thisFormat);            }             img.Dispose();            outBmp.Dispose();             System.IO.File.Delete(strTempFile);        }        #endregion         #region 添加图片水印        ///<summary>        /// 添加图片水印        /// </summary>        /// <param name="png">水印图片</param>        /// <param name="file">原文件</param>        /// <param name="position">水印图片的位置 0居中、1左上角、2右上角、3左下角、4右下角</param>        public void AttachPng(string png, string file)        {            if (string.IsNullOrEmpty(png))                return;             if (!System.IO.File.Exists(png))                return;             if (!System.IO.File.Exists(file))                return;             System.IO.FileInfo oFile = new System.IO.FileInfo(file);            string strTempFile = System.IO.Path.Combine(oFile.DirectoryName, Guid.NewGuid().ToString() + oFile.Extension);            oFile.CopyTo(strTempFile);             Image img = Image.FromFile(strTempFile);            ImageFormat thisFormat = img.RawFormat;            int nHeight = img.Height;            int nWidth = img.Width;             Bitmap outBmp = new Bitmap(nWidth, nHeight);            Graphics g = Graphics.FromImage(outBmp);             // 设置画布的描绘质量            g.CompositingQuality = CompositingQuality.HighQuality;            g.SmoothingMode = SmoothingMode.HighQuality;            g.InterpolationMode = InterpolationMode.HighQualityBicubic;             g.DrawImage(img, new Rectangle(0, 0, nWidth, nHeight),                0, 0, nWidth, nHeight, GraphicsUnit.Pixel);             img.Dispose();             img = Image.FromFile(png);             //Bitmap bmpPng = new Bitmap(img);             //ImageAttributes imageAttr = new ImageAttributes();            //Color bg = Color.Green;            //imageAttr.SetColorKey(bg, bg);             Size pngSize = NewSize(nWidth, nHeight, img);            int nx = 0;            int ny = 0;            int padding = 10;            if (SetPositionWater == 0)            {                nx = (nWidth - pngSize.Width) / 2;                ny = (nHeight - pngSize.Height) / 2;            }            else if (SetPositionWater == 1)            {                nx = padding;                ny = padding;            }            else if (SetPositionWater == 2)            {                nx = (nWidth - pngSize.Width) - padding;                ny = padding;            }            else if (SetPositionWater == 3)            {                nx = padding;                ny = (nHeight - pngSize.Height) - padding;            }            else            {                nx = (nWidth - pngSize.Width) - padding;                ny = (nHeight - pngSize.Height) - padding;            }            g.DrawImage(img, new Rectangle(nx, ny, pngSize.Width, pngSize.Height),                0, 0, img.Width, img.Height, GraphicsUnit.Pixel);             g.Dispose();             // 以下代码为保存图片时,设置压缩质量            EncoderParameters encoderParams = new EncoderParameters();            long[] quality = new long[1];            quality[0] = 100;             EncoderParameter encoderParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);            encoderParams.Param[0] = encoderParam;             //获得包含有关内置图像编码解码器的信息的ImageCodecInfo 对象。            ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders();            ImageCodecInfo jpegICI = null;            for (int x = 0; x < arrayICI.Length; x++)            {                if (arrayICI[x].FormatDescription.Equals("JPEG"))                {                    jpegICI = arrayICI[x];//设置JPEG编码                    break;                }            }             if (jpegICI != null)            {                outBmp.Save(file, jpegICI, encoderParams);            }            else            {                outBmp.Save(file, thisFormat);            }             img.Dispose();            outBmp.Dispose();             System.IO.File.Delete(strTempFile);        }        #endregion         #region 得到指定mimeType的ImageCodecInfo        /// <summary>        /// 保存JPG时用        /// </summary>        /// <param name="mimeType"> </param>        /// <returns>得到指定mimeType的ImageCodecInfo </returns>        private ImageCodecInfo GetCodecInfo(string mimeType)        {            ImageCodecInfo[] CodecInfo = ImageCodecInfo.GetImageEncoders();            foreach (ImageCodecInfo ici in CodecInfo)            {                if (ici.MimeType == mimeType) return ici;            }            return null;        }        #endregion         #region 保存为JPEG格式,支持压缩质量选项        /// <summary>        /// 保存为JPEG格式,支持压缩质量选项        /// </summary>        /// <param name="SourceFile"></param>        /// <param name="FileName"></param>        /// <param name="Qty"></param>        /// <returns></returns>        public bool KiSaveAsJPEG(string SourceFile, string FileName, int Qty)        {            Bitmap bmp = new Bitmap(SourceFile);             try            {                EncoderParameter p;                EncoderParameters ps;                 ps = new EncoderParameters(1);                 p = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, Qty);                ps.Param[0] = p;                 bmp.Save(FileName, GetCodecInfo("image/jpeg"), ps);                 bmp.Dispose();                 return true;            }            catch            {                bmp.Dispose();                return false;            }         }        #endregion         #region 将图片压缩到指定大小        /// <summary>        /// 将图片压缩到指定大小        /// </summary>        /// <param name="FileName">待压缩图片</param>        /// <param name="size">期望压缩后的尺寸</param>        public void CompressPhoto(string FileName, int size)        {            if (!System.IO.File.Exists(FileName))                return;             int nCount = 0;            System.IO.FileInfo oFile = new System.IO.FileInfo(FileName);            long nLen = oFile.Length;            while (nLen > size * 1024 && nCount < 10)            {                string dir = oFile.Directory.FullName;                string TempFile = System.IO.Path.Combine(dir, Guid.NewGuid().ToString() + "." + oFile.Extension);                oFile.CopyTo(TempFile, true);                 KiSaveAsJPEG(TempFile, FileName, 70);                 try                {                    System.IO.File.Delete(TempFile);                }                catch { }                 nCount++;                 oFile = new System.IO.FileInfo(FileName);                nLen = oFile.Length;            }        }        #endregion         #endregion          #region common method         /// <summary>        /// 图片上传错误编码        /// </summary>        /// <param name="code"></param>        /// <returns></returns>        private string GetCodeMessage(int code)        {            var dic = new Dictionary<int, string>(){        {0,"系统配置错误"},        {1,"上传图片成功"},        {2,string.Format( "对不起,上传格式错误!请上传{0}格式图片",SetAllowFormat)},        {3,string.Format("超过文件上传大小,不得超过{0}M",SetAllowSize)},        {4,"未上传文件"},        {5,""},        {6,"缩略图长度和宽度配置错误"},        {7,"检测图片宽度限制"}         };            return dic[code];        }        private void TryError(ResponseMessage rm, int code)        {            rm.IsError = true;            rm.Message = GetCodeMessage(code);        }        private void TryError(ResponseMessage rm, string message)        {            rm.IsError = true;            rm.Message = message;        }        #endregion         #region models        public enum CutMode        {            /// <summary>            /// 根据高宽剪切            /// </summary>            CutWH = 1,            /// <summary>            /// 根据宽剪切            /// </summary>            CutW = 2,            /// <summary>            /// 根据高剪切            /// </summary>            CutH = 3,            /// <summary>            /// 缩放不剪裁            /// </summary>            CutNo = 4        }        public class ResponseMessage        {            /// <summary>            /// 是否遇到错误            /// </summary>            public bool IsError { get; set; }            /// <summary>            /// web路径            /// </summary>            public string WebPath { get; set; }            /// <summary>            /// 文件物理路径            /// </summary>            public string filePath { get; set; }            /// <summary>            /// 反回消息            /// </summary>            public string Message { get; set; }            /// <summary>            /// 文件大小            /// </summary>            public double Size { get; set; }            /// <summary>            /// 图片名            /// </summary>            public string FileName { get; set; }            /// <summary>            /// 图片目录            /// </summary>            public string Directory            {                get                {                    if (WebPath == null) return null;                    return WebPath.Replace(FileName, "");                }            }            /// <summary>            /// 缩略图路径            /// </summary>            public string SmallPath(int index)            {                return string.Format("{0}{1}_{2}{3}", Directory, Path.GetFileNameWithoutExtension(FileName), index, Path.GetExtension(FileName));            }


上一篇:演示stop暴力停止线程导致数据不一致的问题,但是有些有趣的发现 (2017-07-03 21:25)
下一篇:AdminIII连接linux Postgresql过程中的几个小问题

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款