Graphics JPEG压缩图像可以在不损失质量的情况下旋转吗?

Graphics JPEG压缩图像可以在不损失质量的情况下旋转吗?,graphics,compression,jpeg,lossy-compression,Graphics,Compression,Jpeg,Lossy Compression,JPEG是一种有损压缩方案,因此解压缩操作-重新压缩通常会进一步降低每一步的图像质量是否可以旋转JPEG图像而不造成进一步的损失?就我对JPEG算法所知,似乎可以通过一点努力避免进一步的损失。哪些常见的图像处理程序(例如GIMP、Paint Shop Pro、Windows Photo Gallery)和图形库在执行旋转时会导致质量损失,哪些不会?绝对不会-只需更改EXIF数据中的方向值即可。绝大多数图像程序将尊重此设置并显示“旋转”的图像 如果某些条件为真,也可以“手动”(例如编程)以无损方式

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

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


如果某些条件为真,也可以“手动”(例如编程)以无损方式旋转图像-旋转必须为90/180度,且宽度/高度必须是块大小的倍数。您还可以翻转/镜像它。不过,我不知道图像程序是否足够聪明,可以专门处理这个操作。我想不会。

不是jpg专家,但对于90度、180度、270度旋转,答案似乎是肯定的。(甚至可能是360!:)

是的,这是可能的。

快速的谷歌搜索给出了这个程序列表

如果你说的是旋转JPEG图像,那么就没有进一步的压缩了,对吗?它是关于旋转像素位置的


任何程序的旋转都可能改变中间维度,因为它需要保存原始图像,这可能是一个需要考虑的问题。

< P>除非你以90度倍数旋转,否则你的图像将不得不执行某种插值,这可能会降低图像的质量。在这里使用一个好的插值算法会有所帮助

至于打开和重新压缩,我不确定你的质量是否会变差,但我也不确定JPEG是如何工作的

我建议你试着压缩、操作和重新压缩,看看结果是否足够好。是否足够好取决于您的申请。

来自:

“有一些专门的 可以在JPEG上执行的操作 未解压缩的文件,以及 因此,不必引起 一代人的损失,你通常会 从加载和重新保存 普通图像编辑器中的图像 这是可能的 90度旋转和翻转 无损,如果图像尺寸 是文件块的倍数 尺寸(通常为16x16、16x8或8x8 彩色JPEG的像素)。

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


是的,在某些情况下是可能的:图像上的90度旋转和翻转。JPEG算法的核心——有损部分——是将图像分割成8x8像素块,对该块执行一次压缩,然后对结果进行量化。还有一些颜色空间转换和块的无损压缩

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

  • 解压缩并提取块
  • 对每个块的DCT系数进行转置和/或符号翻转
  • 将块重新排列为新的顺序(否则8x8块将被旋转,但仍在原来的位置)
  • 使用无损压缩步骤重新压缩所有内容

  • 有一个名为jpegtran的程序

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

    要无损旋转图像,可以执行以下操作:

    $ jpegtran -rotate 180 -perfect -outfile rotated.jpg origin.jpg
    

    根据肖恩·麦克休的优秀文章:

    每次旋转或扭曲图像时也会发生插值。(...) 90°旋转是无损的,因为不需要重新定位像素 位于两个像素之间的边界上(因此被分割)

    最终以

    尽可能避免旋转照片;如果是一张不水平的照片 需要时,旋转不超过一次

    如果有帮助:

    为了比Microsoft(Windows 7)原生图片查看器及其右键单击旋转选项做得更好,我尝试了以下链接的几个应用程序:

    例如,我尝试了FastStone图像查看器、XnView、Photosurfer、JPEG无损旋转器、ExifPro图像查看器

    经过简单的90°旋转后,它们中没有一个能产生比基本Windows7图片查看器更大的图片。
    无可否认,这么快就得出结论是有限的,但我目前还没有找到一个真正的无损旋转.jpeg应用程序,而且在任何情况下都不比内置的Windows应用程序好。

    360是可行的,但720需要更多的技巧。我让你们都知道:我可以用我的大脑将jpeg旋转0度。你可以“手动”使用jpeg进行90-180-270无损转换。更改图像的Exif不会对数据本身产生任何影响,一些图像查看器也不会很好地处理它。另外,如果你想修改图像的话,玩起来有点难,因为你必须考虑方向…Qt的<代码> QImage <代码> >代码> QPIXMAP> <代码>不考虑EXIF方向字段。因为它可以泄露敏感数据来追踪一个人(如坐标)。我认为没有浏览器支持根据EXIF数据读取图像。打开和重新压缩,尤其是多次,肯定会导致质量下降。这是无损压缩的一个基本弱点。(如您所建议的,是否更糟糕,是否值得关注是绝对主观的。)是否有一个java库可以做到这一点?因此,需要明确的是,在尺寸为倍数的图像上(90°旋转+翻转)