【问题标题】:Is 90 degree image rotation with graphicsmagick or imagemagick lossless使用 graphicsmagick 或 imagemagick 无损进行 90 度图像旋转
【发布时间】:2017-11-12 13:49:51
【问题描述】:

使用 graphicsmagick 或 imagemagick 的 90 度图像旋转总是无损的吗?

例如做的时候

gm convert -rotate 90 img.img rot90.img.img
gm convert -rotate -90 rot90.img.img back.img

img.img 和 back.img 会相等吗?

【问题讨论】:

  • 我不熟悉.img 文件。如果那是无损格式,那么我想/希望您在此过程中不会丢失任何信息。但是如果格式是例如JPEG,那么您几乎可以肯定最后会有细微的变化。
  • @OliverCharlesworth 感谢您的贡献!后缀img 并不是为了表示某种图像文件类型,而是代表所有可能的图像格式。
  • 刚刚找到文章impulseadventure.com/photo/lossless-rotation.html,其中讨论了 EXIF 方向和虚拟旋转。

标签: imagemagick image-rotation graphicsmagick


【解决方案1】:

这个问题的答案更多地取决于您使用的特定图像格式,而不是 Image/GraphicsMagick 的内部结构(假设它们写得很好)。

对于原始格式(例如 BMP),没有理由不完全相同。

对于无损格式,由于数值精度,可能会有一些细微的变化。

对于有损格式(例如 JPEG),几乎可以肯定会有差异。以 JPEG 为例,每个 8x8 块的压缩都会受到其左侧块的影响 - 如果旋转图像,那么空间关系将会改变。

【讨论】:

  • 此外,某些格式(例如PNG)会嵌入创建日期和时间,因此尽管您的图像像素可能逐位相同,但元数据可能会使文件不同正如cmpdiff 所关注的,因此根据您的问题“不等于”
  • “每个 8x8 块的压缩受其左侧块的影响” 可能是最终压缩,但不是量化,这是发生损失的地方。可以将 JPEG 顺时针旋转 90° 而不会丢失,如果两个维度都是 8 的倍数,则其他无损旋转也是可能的。
  • JPEG 旋转是无损的... 如果执行得当。 所以,ImageMagick 是正确的。 The jpegtran command is typically what you're looking for here. 例如,jpegtran -rotate 90 input.jpg output.jpg 无损地将 input.jpg 顺时针旋转 90° 到 output.jpg。有趣的是,不仅仅是可以无损执行的旋转;它还以“M/N”的比例重新缩放,所有 M 从 1 到 16,其中 N 是源 DCT 大小,对于基线 JPEG 是 8。坦率地说,令人着迷的东西。
猜你喜欢
  • 1970-01-01
  • 2013-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多