C#无损压缩图片代码

 
C#无损压缩图片代码
2017-04-14 08:04:01 /故事大全

话不多说,请看代码:

///

/// 根据指定尺寸得到按比例缩放的尺寸,返回true表示以更改尺寸

///

///

图片宽度

///

图片高度

///

指定宽度

/// ///

指定高度

/// 返回true表示以更改尺寸

private bool GetPicZoomSize(ref int picWidth, ref int picHeight, int specifiedWidth, int specifiedHeight)

{

int sW = 0, sH = 0;

Boolean isZoomSize = false;

//按比例缩放

Size tem_size = new Size(picWidth, picHeight);

if (tem_size.Width > specifiedWidth || tem_size.Height > specifiedHeight) //将**改成c#中的或者操作符号

{

if ((tem_size.Width * specifiedHeight) > (tem_size.Height * specifiedWidth))

{

sW = specifiedWidth;

sH = (specifiedWidth * tem_size.Height) / tem_size.Width;

}

else

{

sH = specifiedHeight;

sW = (tem_size.Width * specifiedHeight) / tem_size.Height;

}

isZoomSize = true;

}

else

{

sW = tem_size.Width;

sH = tem_size.Height;

}

picHeight = sH;

picWidth = sW;

return isZoomSize;

}

///

/// 无损压缩图片

///

///

原图片

///

压缩后保存位置

///

高度

///

宽度

///

压缩质量 1-100

///

public bool GetPicThumbnail(string sFile, string dFile, int dHeight, int dWidth, int flag)

{

System.Drawing.Image iSource = System.Drawing.Image.FromFile(sFile);

ImageFormat tFormat = iSource.RawFormat;

int sW = iSource.Width, sH = iSource.Height;

GetPicZoomSize(ref sW, ref sH, dWidth, dHeight);

Bitmap ob = new Bitmap(dWidth, dHeight);

Graphics g = Graphics.FromImage(ob);

g.Clear(Color.WhiteSmoke);

g.CompositingQuality = CompositingQuality.HighQuality;

g.SmoothingMode = SmoothingMode.HighQuality;

g.InterpolationMode = InterpolationMode.HighQualityBicubic;

g.DrawImage(iSource, new Rectangle((dWidth - sW) / 2, (dHeight - sH) / 2, sW, sH), 0, 0, iSource.Width, iSource.Height, GraphicsUnit.Pixel);

g.Dispose();

//以下代码为保存图片时,设置压缩质量

EncoderParameters ep = new EncoderParameters();

long[] qy = new long[1];

qy[0] = flag;//设置压缩的比例1-100

EncoderParameter eParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qy);

ep.Param[0] = eParam;

try

{

ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders();

ImageCodecInfo jpegICIinfo = null;

for (int x = 0; x < arrayICI.Length; x++)

{

if (arrayICI[x].FormatDescription.Equals("JPEG"))

{

jpegICIinfo = arrayICI[x];

break;

}

}

if (jpegICIinfo != null)

{

ob.Save(dFile, jpegICIinfo, ep);//dFile是压缩后的新路径

}

else

{

ob.Save(dFile, tFormat);

}

return true;

}

catch

{

return false;

}

finally

{

iSource.Dispose();

ob.Dispose();

}

}

所属专题:
如果您觉得本文或图片不错,请把它分享给您的朋友吧!

 
故事大全
 
版权所有- © 2012-2015 · 故事大全 SITEMAP站点地图手机看故事 站点地图