以下代码将会返回System.Drawing.Image,请在调用时输入文件路径,目标质量(1-100)。
public System.Drawing.Image compressImage(string fileName,int newQuality) { using (System.Drawing.Image image = System.Drawing.Image.FromFile(fileName)) using (System.Drawing.Image memImage = new Bitmap(image, image.Width, image.Height)) //如果需要自定义长宽,请把参数提取至构造方法 { ImageCodecInfo myImageCodecInfo; System.Drawing.Imaging.Encoder myEncoder; EncoderParameter myEncoderParameter; EncoderParameters myEncoderParameters; myImageCodecInfo = GetEncoderInfo("image/jpeg"); myEncoder = System.Drawing.Imaging.Encoder.Quality; myEncoderParameters = new EncoderParameters(1); myEncoderParameter = new EncoderParameter(myEncoder, newQuality); myEncoderParameters.Param[0] = myEncoderParameter; MemoryStream memStream = new MemoryStream(); memImage.Save(memStream, myImageCodecInfo, myEncoderParameters); System.Drawing.Image newImage = System.Drawing.Image.FromStream(memStream); ImageAttributes imageAttributes = new ImageAttributes(); using (Graphics g = Graphics.FromImage(newImage)) { g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; //** g.DrawImage(newImage, new Rectangle(System.Drawing.Point.Empty, newImage.Size), 0, 0, newImage.Width, newImage.Height, GraphicsUnit.Pixel, imageAttributes); } return newImage; } } private static ImageCodecInfo GetEncoderInfo(String mimeType) { ImageCodecInfo[] encoders; encoders = ImageCodecInfo.GetImageEncoders(); foreach (ImageCodecInfo ici in encoders) if (ici.MimeType == mimeType) return ici; return null; }
如果有别的需求,请将构造方法替换,例如直接输入Image对象或修改输出长宽。
Comments | NOTHING