库中内置的 .Net 编码器(至少是 Microsoft 提供的默认 Windows 库)非常糟糕:
http://b9dev.blogspot.com/2013/06/nets-built-in-jpeg-encoder-convenient.html
部分更新
我现在正在使用这里概述的方法,使用 ImageMagick 调整大小,然后使用 jpegoptim 进行最终压缩,效果要好得多。我意识到这只是部分答案,但一旦时间允许,我会对此进行扩展。
较旧的答案
ImageMagick 是迄今为止我发现的最佳选择。它执行相对可靠的 jpeg 压缩。
http://magick.codeplex.com/
它有几个缺点:
-
它更好但并不完美。特别是,其色度子采样设置为 90% 或以上的高细节,然后跳至较低的细节级别 - 这可能会引入大量伪影。如果你想忽略二次采样,这实际上非常方便。但如果您想要高细节二次采样(例如 50%),那么您将面临更大的挑战。它仍然无法完全达到 Photoshop 或 Google PageSpeed 的质量/压缩水平。
-
它对服务器有特殊的部署负担,很容易被忽视。它需要安装 Visual Studio 2008 SDK 库。该库在任何装有 Visual Studio 的开发计算机上都可用,但是当您第一次访问服务器时,它会因一个模糊的错误而崩溃。这是大多数人不会编写/自动化的潜伏陷阱之一,在未来的服务器迁移过程中您会被它绊倒。
最旧的答案
我四处寻找并发现了一个通过翻译 C 项目来实现 C# JPEG 编码器的项目:
http://www.codeproject.com/Articles/83225/A-Simple-JPEG-Encoder-in-C
我稍微简化了:
https://github.com/b9chris/ArpanJpegEncoder
它生成的 JPEG 质量比内置的 .Net 高得多,但仍然不如 Gimp 或 Photoshop 的好。文件大小也往往更大。
BitMiracle 的实现实际上与 .Net 内置相同 - 相同的质量问题。
很可能只是包装现有的开源实现,例如PageSpeed Tools 中的 Google jpeg_optimizer- 貌似libjpeg在下面,将是最有效的选择。
Update
ArpanJpegEncoder 在部署后似乎存在问题 - 也许我需要提高代码的信任级别,或者可能发生了其他问题。在本地,它可以很好地写入图像,但是一旦部署,我每次都会从中得到一个空白的黑色图像。如果确定原因,我会更新。只是对其他正在考虑这一点的人的警告。