JPEG是一种有损压缩方案,因此解压缩-操作-再压缩通常会在每个步骤中进一步降低图像质量。 是否可能在不产生进一步损失的情况下旋转JPEG图像? 根据我对JPEG算法的了解,似乎可以通过一些努力避免进一步的质量损失。哪些常见的图像操作程序(例如GIMP、Paint Shop Pro、Windows照片库)和图形库在执行旋转时会导致质量损失,哪些不会?
JPEG是一种有损压缩方案,因此解压缩-操作-再压缩通常会在每个步骤中进一步降低图像质量。 是否可能在不产生进一步损失的情况下旋转JPEG图像? 根据我对JPEG算法的了解,似乎可以通过一些努力避免进一步的质量损失。哪些常见的图像操作程序(例如GIMP、Paint Shop Pro、Windows照片库)和图形库在执行旋转时会导致质量损失,哪些不会?
有一个名为jpegtran的程序
jpegtran - 用于在不损失质量的情况下在不同的JPEG格式之间进行转码的实用程序。
要无损旋转图像,您可以执行以下操作:
$ jpegtran -rotate 180 -perfect -outfile rotated.jpg origin.jpg
旋转或翻转8x8块将产生具有相同基本系数的DCT,但可能会根据变换而转置和/或带有一些符号变化。因此,无损旋转或翻转图像的基本步骤包括:
完全可以-只需更改EXIF数据中的方向值。绝大多数图像程序将尊重此设置并显示“旋转”的图片。
如果满足某些条件,还可以以无损方式“手动”(例如编程方式)旋转图像-旋转必须是90/180度,并且宽度/高度必须是块大小的倍数。您还可以翻转/镜像它。不过,我不知道图像程序是否足够聪明以特殊情况处理此操作。我猜不能。
来自JPEG FAQ:
“有一些特殊操作可以在不解压缩JPEG文件的情况下进行,因此可以避免使用常规图像编辑器加载和重新保存图像时会发生的世代损失。特别是如果图像尺寸是文件块大小的倍数(通常为16x16、16x8或8x8像素),则可以无损地进行90度旋转和翻转彩色JPEG。但您需要特殊软件;在普通图像编辑器中旋转图像将不是无损的。”
虽然我不是jpg专家,但似乎对于90度、180度、270度旋转,答案是肯定的。(甚至可能还有360度!:))
每次旋转或扭曲图像时,也会发生插值。(...) 90°旋转是无损的,因为没有像素需要重新定位到两个像素之间的边界(因此被分割)。
最终得出结论:
尽可能避免旋转照片;如果一张不平衡的照片需要旋转,则最多旋转一次。
如果有帮助:
为了比微软(Windows 7)本地图片查看器及其右键旋转选项更好,我尝试了以下链接中的几个应用程序:http://jpegclub.org/losslessapps.html
例如,我尝试了FastStone Image Viewer、XnView、Photosurfer、JPEG Lossless Rotator和ExifPro Image Viewer。
在简单的90度旋转后,它们中没有一个能产生比基本的Windows 7图片查看器更大的图片。 虽然这样得出结论有些片面,但我仍然没有找到一个真正无损旋转.jpeg文件的应用程序,无论如何都不比内置的Windows应用程序更好。
除非您旋转90度的倍数,否则您的图像将需要执行某种插值,这可能会降低图像的质量。使用良好的插值算法将有所帮助。
至于打开和重新压缩,我不确定您是否会得到更差的质量,但我也不确定JPEG的工作原理。
我建议您尝试压缩、操作和重新压缩,并自行判断结果是否足够好。什么是足够好取决于您的应用程序。