JPEG 是一种有损压缩方案,因此解压缩-操作-再压缩通常会进一步降低每一步的图像质量。是否可以旋转 JPEG 图像而不会造成进一步的损失?根据我对 JPEG 算法的了解,天真地似乎可以通过一些努力来避免进一步的损失。哪些常见的图像处理程序(例如 GIMP、Paint Shop Pro、Windows 照片库)和图形库在执行旋转时会导致质量损失,哪些不会?
10 回答
有一个名为 jpegtran 的程序
jpegtran – 用于在不同 JPEG 格式之间进行无损转码的实用程序。
要无损旋转图像,您可以执行以下操作:
$ jpegtran -rotate 180 -perfect -outfile rotated.jpg origin.jpg
是的,在某些情况下是可能的:90 度旋转和翻转图像。JPEG 算法的核心——有损部分——涉及将图像分解为 8x8 像素块,对块执行离散余弦变换,然后量化结果。除此之外,还有一些色彩空间转换和块的无损压缩。
旋转或翻转 8x8 块将给出具有相同基本系数的 DCT,但可能会转置和/或根据变换进行一些符号变化。因此,无损旋转或翻转图像的基本步骤包括:
- 解压缩并提取块
- 转置和/或符号翻转每个块的 DCT 系数
- 将块重新排列成新的顺序(否则 8x8 块将被旋转但仍在旧位置)
- 使用无损压缩步骤重新压缩所有内容。
绝对 - 只需更改 EXIF 数据中的方向值。绝大多数图像程序将尊重此设置并显示“旋转”的图片。
如果某些标准为真,也可以“手动”(例如以编程方式)以无损方式旋转图像 - 旋转必须是 90/180 度并且宽度/高度必须是块大小的倍数。您也可以翻转/镜像它。不过,我不知道图像程序是否足够聪明,可以对这种操作进行特殊处理。我猜不会。
“有一些专门的操作可以在不解压缩 JPEG 文件的情况下完成,因此不会产生通常在常规图像编辑器中加载和重新保存图像所产生的代际损失。特别是它是如果图像尺寸是文件块大小的倍数(对于彩色 JPEG,通常为 16x16、16x8 或 8x8 像素),则可以进行 90 度旋转和无损翻转。
...但是您确实需要特殊的软件;在常规图像编辑器中旋转图像不会是无损的。”
不是 jpg 专家,但对于 90、180、270 度旋转,答案似乎是肯定的。(甚至可能是 360!:))
是的,有可能。
快速的谷歌搜索给出了执行此操作的程序列表
如果您说的是旋转 JPEG 图像,那么就没有进一步的压缩了,对吧?它是关于旋转像素位置。
使用任何程序进行旋转都可能会改变中间尺寸,因为它需要保留原始图像,这可能是一个需要考虑的问题。
除非您旋转 90 度的倍数,否则您的图像将不得不执行某种可能会降低图像质量的插值。在这里使用一个好的插值算法会有所帮助。
至于打开和重新压缩,我不确定你实际上会得到更差的质量,但是我不确定 JPEG 究竟是如何工作的。
我建议您尝试压缩、操作和重新压缩,看看结果是否足够好。什么是足够好的取决于您的应用程序。
根据Sean McHugh关于理解数字图像插值的优秀文章:
每次旋转或扭曲图像时也会发生插值。(...) 90° 旋转是无损的,因为没有像素必须重新定位到两个像素之间的边界上(因此被分割)。
并最终以
尽可能避免旋转照片;如果不平整的照片需要它,请旋转一次。
如果它可以帮助:
Trying to do better than the Microsoft (Windows 7) native picture viewer and its right-click rotation options, I tried several apps of the following link : http://jpegclub.org/losslessapps.html
For instance, I tried FastStone Image Viewer, XnView, Photosurfer, JPEG Lossless Rotator, ExifPro Image Viewer.
NONE of them yields a bigger picture than the basic Windows 7 picture viewer after a simple 90° rotation. It's admittedly limited to conclude so quickly, but I still don't have found a real lossless rotation .jpeg app for the moment, and in any case not better than the built-in Windows one.