如何以可复制的方式(不带时间戳)使用ImageMagick转换?


3

我试图在脚本中使用ImageMagick来转换和调整大量文件的大小以进行版本控制。我需要每次转换文件的时间相同,因此git不会提交刚刚更新了时间戳的文件。不幸的是,ImageMagick坚持为每个图像添加一个创建和修改时间戳,以使git再次重新提交每个文件。

关于此问题,我进行了很多搜索,并尝试了以下标志:

-define png:exclude-chunks=date
+set date:create +set date:modify
-strip

这些都没有导致可重复的过程:

-define png:exclude-chunks = date

stephen@Saturn ~/test (git)-[master] % convert input.png -define png:exclude-chunks=date -resize 100x100 1.png
stephen@Saturn ~/test (git)-[master] % convert input.png -define png:exclude-chunks=date -resize 100x100 2.png
stephen@Saturn ~/test (git)-[master] % diff 1.png 2.png
Binary files 1.png and 2.png differ
stephen@Saturn ~/test (git)-[master] % cmp -l 1.png 2.png
  125  41  42
  126  67   0
  127 322 101
  128 321 101
  129  35 353
  130  64 370

+设置日期:创建+设置日期:修改

stephen@Saturn ~/test (git)-[master] % convert input.png +set date:create +set date:modify -resize 100x100 1.png
stephen@Saturn ~/test (git)-[master] % convert input.png +set date:create +set date:modify -resize 100x100 2.png
stephen@Saturn ~/test (git)-[master] % diff 1.png 2.png
Binary files 1.png and 2.png differ
stephen@Saturn ~/test (git)-[master] % cmp -l 1.png 2.png
  125  51  52
  126  71   0
  127 375 211
  128 260 230
  129 272 141
  130  73 360

-跳闸

stephen@Saturn ~/test (git)-[master] % convert input.png -strip -resize 100x100 1.png
stephen@Saturn ~/test (git)-[master] % convert input.png -strip -resize 100x100 2.png
stephen@Saturn ~/test (git)-[master] % diff 1.png 2.png
Binary files 1.png and 2.png differ
stephen@Saturn ~/test (git)-[master] % cmp -l 1.png 2.png
  110  41  45
  111 241 246
  112 235 360
  113 264 160
  114 252 263

如何使用ImageMagick完成可复制的转换?

Answers:


2

您需要将ImageMagick更新到6.9.1-3或更高版本,然后问题中的所有命令都将创建可复制的图像。

我在变更日志中找到了以下内容:

2015-04-20 6.9.1-3脆皮<quetzlzacatenango @ image ...>
  *支持-define compose:clamp = false选项(参考
    https://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=26946)。
  *不要在SeekBlob()中扩展任何用户提供的图像缓冲区(错误报告)
    来自a.chernij@corp ...)。
  *改进了可复制的版本(参考
     https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=783933)。
  *画一个宽度和高度为1的矩形(参考
    https://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=24874)。

在发现ArchLinux上的ImageMagick可以正常工作(与Ubuntu 16.04上的ImageMagick相反)后,我找到了changelog条目。

ArchLinux(良好的,可复制的图像):

$ convert --version
Version: ImageMagick 6.9.8-8 Q16 x86_64 2017-05-30 http://www.imagemagick.org

Ubuntu 16.04(错误,每次都有不同的映像):

$ convert --version
Version: ImageMagick 6.8.9-9 Q16 x86_64 2017-05-26 http://www.imagemagick.org

1

我已经放弃让ImageMagick表现出来了,我不得不使用GraphicsMagick,它似乎具有ImageMagick的所有功能,但没有以下时间戳错误:

stephen@Saturn ~/test (git)-[master] % gm convert -resize 100x100 input.png 1.png
stephen@Saturn ~/test (git)-[master] % gm convert -resize 100x100 input.png 2.png
stephen@Saturn ~/test (git)-[master] % diff 1.png 2.png
stephen@Saturn ~/test (git)-[master] % cmp -l 1.png 2.png

Identify显示2个不同的时间戳,但是它是从文件属性而不是嵌入式元数据中获取的,并且diff / cmp将文件显示为相同。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.