在做图片网站时,经常会遇到图片过大,没法上传空间的问题,本人在做套图站时,也遇到这个问题,空间只有5G,每张图片要5M,这样放不下千张,空间就用完了,没办法,只好想方法压缩图片,该文介绍用C#写的裁剪函数和压缩函数,把图片尺寸控制在1200宽的像素,然后进行压缩,图片能缩减到100kb上下,这样,有很多图片可以上传。贴出算法,给大家分享一下经验,希望对朋友有帮助:
```csharp
//将图片控制在宽度为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左右,且在宽屏显示器上无明显降低图片质量.