可以旋转JPEG压缩图像而不会降低质量吗?

Mat*_*Mat 23 compression graphics jpeg lossy-compression

JPEG是一种有损压缩方案,因此解压缩 - 操作 - 重新压缩通常会进一步降低每一步的图像质量.是否可以旋转JPEG图像而不会造成进一步的损失?从我对JPEG算法的了解很少,它似乎可以通过一些努力避免进一步的损失.哪些常见的图像处理程序(例如GIMP,Paint Shop Pro,Windows照片库)和图形库在执行旋转时会导致质量损失,哪些不会?

kcw*_*cwu 14

有一个名为jpegtran的程序

jpegtran - 一种用于在不同JPEG格式之间进行无损转码的实用程序.

这是一个基于IJG代码的其中提供JPEG无损旋转功能的应用程序列表

  • 警告:我现在还发现 jpegtran _can 事实上_失去质量。它可能发生在 jpeg 中,它的大小不能被 16 整除。欢迎知道的人发表评论。 (3认同)

And*_*ant 11

绝对 - 只需更改EXIF数据中的方向值即可.绝大多数图像程序将尊重此设置并显示图片"旋转".

如果某些标准为真,也可以"手动"(例如以编程方式)以无损方式旋转图像 - 旋转必须为90/180度,宽度/高度必须是块大小的倍数.你也可以翻转/镜像它.我不知道图像程序是否足够聪明,特殊情况下这个操作.我猜不会.

  • 更改图像的Exif不会对数据本身做任何事情,并且某些图像查看器不会很好地对待它.另外,如果你想修改图像,它会更难玩,因为你必须考虑方向...... (2认同)

ISW*_*ISW 9

来自JPEG FAQ:

"有一些专门的操作可以在没有解压缩的情况下在JPEG文件上完成,因此不会产生通常从加载和重新保存图像的常规图像编辑器中产生的世代损失.特别是如果图像尺寸是文件块大小的倍数(对于彩色JPEG通常为16x16,16x8或8x8像素),则可以无损地进行90度旋转和翻转
....

但你确实需要特殊的软件; 在常规图像编辑器中旋转图像不会是无损的."


Boo*_*jum 9

是的,某些情况可能是:90度旋转和翻转图像.JPEG算法的核心 - 有损部分 - 涉及将图像分成8x8像素块,对块执行离散余弦变换,然后量化结果.在此之上还有一些色块空间转换和块的无损压缩.

旋转或翻转8x8块将使DCT具有相同的基本系数,但可能转换和/或根据变换而改变一些符号.因此,无损旋转或翻转图像的基本步骤包括:

  1. 解压缩并提取块
  2. 对每个块进行转置和/或符号翻转DCT系数
  3. 将块重新调整为新的顺序(否则8x8块将旋转但仍旧在旧位置)
  4. 使用无损压缩步骤将其全部重新压缩.

  • 有没有一个java库可以做到这一点? (2认同)