26人参与 • 2025-07-04 • Asp.net
在 c# 中,system.drawing.bitmap
是表示图像的核心类之一。如果想要对 bitmap
对象进行压缩,通常是指将其保存为文件时使用较低的图像质量(例如 jpeg 格式),或者调整其尺寸以减少内存占用或文件大小。
using system; using system.drawing; using system.drawing.imaging; public class imagecompressor { public static void compressandsave(bitmap bitmap, string outputpath, long quality = 80l) { // 指定编码器为 jpeg imagecodecinfo jpgencoder = getencoder(imageformat.jpeg); // 设置压缩质量 encoder qualityencoder = encoder.quality; encoderparameters encoderparams = new encoderparameters(1); encoderparameter qualityparam = new encoderparameter(qualityencoder, quality); // 0-100 encoderparams.param[0] = qualityparam; // 保存图像 bitmap.save(outputpath, jpgencoder, encoderparams); } private static imagecodecinfo getencoder(imageformat format) { imagecodecinfo[] codecs = imagecodecinfo.getimagedecoders(); foreach (imagecodecinfo codec in codecs) { if (codec.formatid == format.guid) { return codec; } } return null; } }
bitmap bmp = new bitmap("input.png"); imagecompressor.compressandsave(bmp, "output.jpg", 70l); // 压缩质量设为70% bmp.dispose();
如果希望进一步减小图像大小,可以先调整图像的宽高,然后可以结合上面的方法,把缩小后的图像再进行压缩保存:
public static bitmap resizebitmap(bitmap original, int newwidth, int newheight) { bitmap resized = new bitmap(newwidth, newheight); using (graphics g = graphics.fromimage(resized)) { g.interpolationmode = system.drawing.drawing2d.interpolationmode.highqualitybicubic; g.drawimage(original, 0, 0, newwidth, newheight); } return resized; }
public static byte[] compressbitmaptobytes(bitmap bitmap, long quality = 80l) { using (var ms = new memorystream()) { imagecodecinfo jpgencoder = getencoder(imageformat.jpeg); encoder qualityencoder = encoder.quality; encoderparameters encoderparams = new encoderparameters(1); encoderparams.param[0] = new encoderparameter(qualityencoder, quality); bitmap.save(ms, jpgencoder, encoderparams); return ms.toarray(); } }
.dispose()
来释放 bitmap
和 graphics
等资源。unsafe
或 lockbits
提高性能,但复杂度会增加。system.drawing.common
在 .net core/.net 5+ 中不再支持非 windows 平台。如果需要跨平台,请考虑使用 imagesharp。using sixlabors.imagesharp; using sixlabors.imagesharp.processing; using sixlabors.imagesharp.formats.jpeg; var image = image.load("input.png"); image.mutate(x => x.resize(image.width / 2, image.height / 2)); // 缩放 image.saveasjpeg("output.jpg", new jpegencoder { quality = 70 }); // 压缩质量
到此这篇关于c#针对system.drawing.bitmap压缩的实现的文章就介绍到这了,更多相关c# system.drawing.bitmap压缩内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论