Bar*_*ran 36 .net c# compression jpeg image
我正在使用C#并希望使用JPEG格式保存图像.然而,.NET降低了图像的质量,并通过压缩来保存它们是不够的.
我想保存原始质量和大小的文件.我使用以下代码,但压缩和质量不像原始的.
Bitmap bm = (Bitmap)Image.FromFile(FilePath);
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
ImageCodecInfo ici = null;
foreach (ImageCodecInfo codec in codecs)
{
if (codec.MimeType == "image/jpeg")
ici = codec;
}
EncoderParameters ep = new EncoderParameters();
ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)100);
bm.Save("C:\\quality" + x.ToString() + ".jpg", ici, ep);
Run Code Online (Sandbox Code Playgroud)
我正在归档工作室照片和质量和压缩是非常重要的.谢谢.
Chr*_*ini 19
内置到库中的.Net编码器(至少是Microsoft提供的默认Windows库)非常糟糕:
http://b9dev.blogspot.com/2013/06/nets-built-in-jpeg-encoder-convenient.html
我现在使用这里概述的方法,使用ImageMagick进行调整大小,然后使用jpegoptim进行最终压缩,结果更好.我意识到这是一个部分答案,但我会在一次允许的情况下对此进行扩展.
ImageMagick是我迄今为止找到的最佳选择.它执行相对稳定的jpeg压缩.
它有几个缺点:
它更好但不完美.特别是,它的色度子采样设置为90%或更高的高细节,然后跳到更低的细节级别 - 一个可以引入大量伪像.如果你想忽略子采样,这实际上非常方便.但是如果你想要50%的高细节子采样,你将面临更大的挑战.它仍然不会完全达到Photoshop或Google PageSpeed的质量/压缩级别.
它在服务器上有一个特殊的部署负担,很容易错过.它需要安装Visual Studio 2008 SDK lib.这个lib可以在任何带有Visual Studio的开发机器上使用,但是你第一次点击服务器它就会出现一个模糊的错误.这是潜伏的陷阱之一,大多数人都没有脚本/自动化,你将在未来的服务器迁移期间绊倒它.
我挖了一个项目,通过翻译C项目来实现C#JPEG编码器:
http://www.codeproject.com/Articles/83225/A-Simple-JPEG-Encoder-in-C
我稍微简化了一下:
https://github.com/b9chris/ArpanJpegEncoder
它产生比.Net内置更高质量的JPEG,但仍然不如Gimp或Photoshop.文件大小也往往更大.
BitMiracle的实现几乎与.Net内置相同 - 相同的质量问题.
可能只是包装一个现有的开源实现,比如PageSpeed Tools中的Google jpeg_optimizer - 看起来像libjpeg,将是最有效的选择.
ArpanJpegEncoder一旦部署就会出现问题 - 也许我需要增加代码的信任级别,或者可能还有其他事情正在发生.在本地,它可以很好地写入图像,但是一旦部署,我每次都会从中获得一张空白的黑色图像.如果我确定原因,我会更新.只是警告其他人考虑它.
Mic*_*odd 12
看起来您将质量设置为100%.这意味着不会有压缩.
如果您更改压缩级别(80,50等)并且您对质量不满意,则可能需要尝试使用其他图像库.LEADTools有一个很好的(非自由)引擎.
更新:作为一名评论者提到,使用JPEG时,100%质量仍然不意味着无损压缩.加载图像,对其执行某些操作,然后再次保存,最终会导致图像质量下降.如果您需要更改和保存图像而不丢失任何数据,则需要使用无损格式,如TIFF,PNG或BMP.我会使用压缩的TIFF(因为即使它被压缩它仍然无损)或PNG.
归档时间: |
|
查看次数: |
78559 次 |
最近记录: |