C#实现图片的无损压缩

摘要:
//////图像缩略图处理//////图像源数据///压缩质量1-100///缩略图的宽///缩略图的高///publicstaticbyte[]ConvertToThumbnail{byte[]bs=null;try{if(bytes!

/// <summary>

/// 图像缩略图处理

/// </summary>

/// <param name="bytes">图像源数据</param>

/// <param name="compression">压缩质量 1-100</param>

/// <param name="thumbWidth">缩略图的宽</param>

/// <param name="thumbHeight">缩略图的高</param>

/// <returns></returns>

public static byte[] ConvertToThumbnail(byte[] bytes, int compression = 100, int thumbWidth = 0, int thumbHeight = 0)

{

byte[] bs = null;

try

{

if (bytes != null)

{

using (MemoryStream ms = new MemoryStream(bytes))

{

using (Bitmap srcimg = new Bitmap(ms))

{

if (thumbWidth == 0 && thumbHeight == 0)

{

thumbWidth = srcimg.Width;

thumbHeight = srcimg.Height;

}

using (Bitmap dstimg = new Bitmap(thumbWidth, thumbHeight))//图片压缩质量

{

//从Bitmap创建一个System.Drawing.Graphics对象,用来绘制高质量的缩小图。

using (Graphics gr = Graphics.FromImage(dstimg))

{

//把原始图像绘制成上面所设置宽高的缩小图

Rectangle rectDestination = new Rectangle(0, 0, thumbWidth, thumbHeight);

gr.Clear(Color.WhiteSmoke);

gr.CompositingQuality = CompositingQuality.HighQuality;

gr.SmoothingMode = SmoothingMode.HighQuality;

gr.InterpolationMode = InterpolationMode.HighQualityBicubic;

gr.DrawImage(srcimg, rectDestination, 0, 0, srcimg.Width, srcimg.Height, GraphicsUnit.Pixel);

EncoderParameters ep = new EncoderParameters(1);

ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, compression);//设置压缩的比例1-100

ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders();

ImageCodecInfo jpegICIinfo = arrayICI.FirstOrDefault(t => t.FormatID == System.Drawing.Imaging.ImageFormat.Png.Guid);

using (MemoryStream dstms = new MemoryStream())

{

if (jpegICIinfo != null)

{

dstimg.Save(dstms, jpegICIinfo, ep);

}

else

{

dstimg.Save(dstms, System.Drawing.Imaging.ImageFormat.Png);//保存到内存里

}

bs = new Byte[dstms.Length];

dstms.Position = 0;

dstms.Read(bs, 0, bs.Length);

}

}

}

}

}

}

}

catch (Exception ex)

{

LogManager.DefaultLogger.Error(LogConvert.ParseWebEx(ex), string.Concat("ConvertToThumbnail error.", thumbWidth, " ", thumbHeight));

}

return bs;

}

免责声明:文章转载自《C#实现图片的无损压缩》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇halo项目源码本地部署解决方案CMD命令行正确显示中文下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

前端开发中常用的几种图片格式及其使用规范

在介绍图片格式之前,首先说一些额外的东西。 矢量图与位图。 矢量图是通过组成图形的一些基本元素,如点、线、面,边框,填充色等信息通过计算的方式来显示图形的。一般来说矢量图表示的是几何图形,文件相对较小,并且放大缩小不会失真。 这里有一点要注意的是web开发中用到的图片都不是矢量图,即使是一个三角形,只有一个边框,都是位图。 那么矢量图在哪里有用到呢? 我目...

Golang压缩Jpeg图片和PNG图片

博主一直在维护一个导出PDF的服务,但是这个服务导出的PDF文件是真的巨大,动辄就上百MB。这里面主要是图片占据了大多数体积,所以考虑在导出前压缩一下图片。 Jpeg的图片压缩是很好做的,因为jpeg这个协议本身就支持调整图片质量的。在golang中,我们只需要使用标准库的image/jpeg,将图片从二进制数据解码后,降低质量再编码为二进制数据即可实现...

Unity3D–Texture图片空间和内存占用分析

Texture图片空间和内存占用分析。由于U3D并没有很好的诠释对于图片的处理方式,所以很多人一直对于图集的大小和内存的占用情况都不了解。在此对于U3D的图片问题做一个实际数据的分析。此前的项目都会存在这样或者那样的打包后包大小与内存占用情况的问题,所以这次所以彻彻底底得分析下U3D对于Texture的处理方式。程序里的内存优化请参考《Unity3d优化之...

移动端 H5 拍照 从手机选择图片,移动端预览,图片压缩,图片预览,再上传服务器

前言:最近公司的项目在做全网营销,要做非微信浏览器的wap 站 的改版,其中涉及到的一点技术就是采用H5 选择手机相册中的图片,或者拍照,再将获取的图片进行压缩之后上传。 这个功能模块主要有这5点比较难:   1手机获取相册的图片文件,拍照的图片文件,通过js 的自带的img对象,获取图片对象。     2.图片的压缩,采用canvas 画布进行压缩图片,...

php图片压缩

php图片压缩 能对图片的大小、质量进行压缩。 <?php class ThumbHandler {     var $dst_img;// 目标文件     var $h_src; // 图片资源句柄     var $h_dst;// 新图句柄     var $h_mask;// 水印句柄     var $img_create_quality...

iOS图片压缩

项目中常会遇到,上传图片的操作,由于iPhone手机直接拍照的图片往往比较大,一般3-4M,如果直接上传不做处理会浪费用户很多流量,再者有很多场景并不需要高清图片,所以在上传图片前对图片进行压缩,是很有必要的。 1.OC中的UIKit中提供了现成的压缩函数UIImageJPEGRepresentation(UIImage * __nonnull image...