c# 如何实现图片压缩
2024-10-21 18:47:12
一般在web应用中,对客户端提交上来的图片肯定需要进行压缩的。尤其是比较大的图片,如果不经过压缩会导致页面变的很大,打开速度比较慢,当然了如果是需要高质量的图片也得需要生产缩略图。
下面贴出我自己琢磨的图片压缩算法,首先这个是未经优化的简单实现:
代码如下:
public static System.Drawing.Image GetImageThumb(System.Drawing.Image sourceImg, int width, int height)
{
System.Drawing.Image targetImg = new System.Drawing.Bitmap(width, height);
using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(targetImg))
{
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
g.DrawImage(sourceImg, new System.Drawing.Rectangle(0, 0, width, height), new System.Drawing.Rectangle(0, 0, sourceImg.Width, sourceImg.Height), System.Drawing.GraphicsUnit.Pixel);
g.Dispose();
}
return targetImg;
}
这个方法比较简单,用到的是高质量压缩。经过这个方法压缩后,200K的图片只能压缩到160k左右。经过改写代码实现了如下的方法:
代码如下:
public static bool GetPicThumbnail(string sFile, string outPath, int flag)
{
System.Drawing.Image iSource = System.Drawing.Image.FromFile(sFile);
ImageFormat tFormat = iSource.RawFormat;
//以下代码为保存图片时,设置压缩质量
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)
{
iSource.Save(outPath, jpegICIinfo, ep);//dFile是压缩后的新路径
}
else
{
iSource.Save(outPath, tFormat);
}
return true;
}
catch
{
return false;
}
finally
{
iSource.Dispose();
iSource.Dispose();
}
}
以上就是c# 如何实现图片压缩的详细内容,更多关于c# 图片压缩的资料请关注脚本之家其它相关文章!
最新文章
- HTTPf服务器(3)
- css兼容性大坑
- 写一些封装part1 (事件绑定移除,圆形矩形碰撞检测)
- [Asp.net 5] DependencyInjection项目代码分析4-微软的实现(3)
- Android帧动画
- java.lang.Exception: Socket bind failed 服务器端口冲突-->;修改端口
- jquery常用方法以及详解
- 限制oracle用户创建、删除、修改用户对象
- Oracle EBS-SQL (WIP-16):检查期间手工下达的车间任务数.sql
- OC中自定义构造方法
- MySQLzip archive版本(5.7.19)安装教程
- Kali学习笔记43:SQL盲注
- @RequestBody Spring MVC 示例
- 2 Servlet 细节
- [正则表达式]匹配Unicode
- activiti-explorer 启动报错 Error creating bean with name &#39;demoDataConfiguration&#39;
- 【Unity】5.2 天空盒
- JAVA对于程序的运行的一种解说
- win10中强制vs2015使用管理员启动
- 同样的神经网络引擎,苹果A11芯片比华为麒麟970牛在哪?