使用 mogrify/imagemagick 保留图像的修改时间

使用 mogrify/imagemagick 保留图像的修改时间

我有大量的家庭照片,但我并不真正需要全分辨率。我想使用 mogrify,但我在一组示例图像上尝试了它,它似乎将文件的修改时间设置为当前时间。有什么方法可以保留原始图像的修改/创建时间(对于 EXIF 数据和 Linux 的本机文件修改时间,您可以使用查看stat)?

答案1

你总是可以通过一些脚本来做到这一点:

exiftool  -q -r -ext jpg -if '
    $ImageWidth > 1000 ||
    $ImageHeight > 1000 and
      !print "$Directory/$Filename\0"' . |
  xargs -r0 sh -c '
    for file do
      mv -i "$file" "$file.back" &&
        convert -resize "1000x1000>" "$file.back" "$file" &&
        touch -r "$file.back" "$file"
    done' sh

这里调整图像大小,使它们适合 1000x1000 的边界框。

  • exiftool用于查找需要调整大小的图像
  • convert调整它们的大小(不影响 exif 信息)
  • touch -r从备份文件中恢复原始时间戳

答案2

您可以使用图像魔术师 mogrify降低分辨率(调整大小)任何大于 800x800 的文件以适合 800x800 并保留其时间戳,如下所示:

magick mogrify -define preserve-timestamp=true -resize '800x800>' *.jpg

如果您想首先测试而不覆盖原始文件,而是将调整大小的文件写入名为 的新目录RESIZED,您可以执行以下操作:

mkdir RESIZED
magick mogrify -path RESIZED -define preserve-timestamp=true -resize '800x800>' *.jpg

答案3

我不确定图像魔术师,但是 GraphicsMagick原生支持这个

$ ls -lh family_photo.jpg 
-rw-r--r-- 1 justin justin 901K Sep  9  2007 family_photo.jpg
$ gm mogrify -preserve-timestamp -rotate -90 family_photo.jpg 
$ ls -lh family_photo.jpg 
-rw-r--r-- 1 justin justin 681K Sep  9  2007 family_photo.jpg

相关内容