在做图片网站时,经常会遇到图片过大,没法上传空间的问题,本人在做套图站时,也遇到这个问题,空间只有5G,每张图片要5M,这样放不下千张,空间就用完了,没办法,只好想方法压缩图片,该文介绍用C#写的裁剪函数和压缩函数,把图片尺寸控制在1200宽的像素,然后进行压缩,图片能缩减到100kb上下,这样,有很多图片可以上传。贴出算法,给大家分享一下经验,希望对朋友有帮助:
//将图片控制在宽度为1200像素 public static Bitmap PercentImage(System.Drawing.Image srcImage) { int newW = srcImage.Width < 1200 ? srcImage.Width : 1200; int newH = int.Parse(Math.Round(srcImage.Height * (double)newW / srcImage.Width).ToString()); try { Bitmap b = new Bitmap(newW, newH); Graphics g = Graphics.FromImage(b); g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Default; g.DrawImage(srcImage, new System.Drawing.Rectangle(0, 0, newW, newH), new System.Drawing.Rectangle(0, 0, srcImage.Width, srcImage.Height), GraphicsUnit.Pixel); g.Dispose(); return b; } catch (Exception) { return null; } } //将图片按百分比压缩,flag取值1到100,越小压缩比越大 public static bool YaSuo(System.Drawing.Image iSource, string outPath, int flag) { ImageFormat tFormat = iSource.RawFormat; EncoderParameters ep = new EncoderParameters(); long[] qy = new long[1]; qy[0] = flag; EncoderParameter eParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qy); ep.Param[0] = eParam; try { ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageDecoders(); ImageCodecInfo jpegICIinfo = null; for (int x = 0; x < arrayICI.Length; x++) { if (arrayICI[x].FormatDescription.Equals("JPEG")) { jpegICIinfo = arrayICI[x]; break; } } if (jpegICIinfo != null) iSource.Save(outPath, jpegICIinfo, ep); else iSource.Save(outPath, tFormat); iSource.Dispose(); return true; } catch { iSource.Dispose(); return false; } }进过反复实验,将压缩比定在60,足以将一副500kb大的图片,压缩成180kb左右,且在宽屏显示器上无明显降低图片质量.
