在 Mac OS X 中批量调整图像大小而不更改创建日期

在 Mac OS X 中批量调整图像大小而不更改创建日期

我有很多图片需要调整大小,但我不想更改创建日期。我尝试使用 Automator、Photoshop、Preview,但每次使用这些软件时,软件都会更改图片的创建日期。

如果有人有想法?

答案1

我有很多图片需要调整大小,但我不想更改创建日期。我尝试使用 Automator、Photoshop、Preview,但每次使用这些软件时,软件都会更改图片的创建日期。

您是否将创建日期与修改日期混淆了?因为归根结底,如果文件被修改,则文件的创建日期永远不会改变;这就是修改日期的用途。

虽然我不确定您使用什么方法来调整图像大小,但据我所知,如果您正在获取图像目录 - 然后告诉脚本根据源图像创建衍生图像 - 新创建的衍生图像会有一个新的创建日期,因为它只是以某种方式处理原始图像的新副本。

但假设你有一个目录,里面装满了你想要处理并覆盖的图像,我建议安装和使用优秀的命令行工具图像魔术师。如果您不习惯通过官方二进制文件安装 Mac OS X 版 ImageMagick(虽然效果不错,但如果您不熟悉命令行操作,可能会感到困惑),那么Cactuslab 提供了不错的 Mac OS X 软件包安装程序。或者你甚至可以通过以下方式安装 ImageMagick自制通过安装它,然后brew install imagemagick从命令行运行来安装 ImageMagick。

安装后,你可以运行一个简单的 Bash 脚本,如下所示,使用find使用 ImageMagickconvert处理图像的命令工具:

find -E 'Desktop/Pics' -type f -iregex '.*\.(JPG|JPEG|PNG|TIF|TIFF)$' |\
  while read FULL_IMAGE_PATH
  do
    convert -density 72 -units PixelsPerInch -resize "1500x1500>" -quality 90 "${FULL_IMAGE_PATH}" "${FULL_IMAGE_PATH}"
  done

在此示例中,脚本将查找Pics/工作用户桌面上的目录,然后搜索Pics/其中带有 JPG、JPEG、PNG、TIF 或 TIFF 扩展名的任何文件;搜索不区分大小写,因此也会找到小写版本。一旦找到图像,它将把图像的 DPI 转换为 72,并使用 PPI(每英寸像素数)单位执行此操作,如果图像的最长边大于 1500 像素,则根据图像的最长边将图像调整为 1500x1500 像素宽/高。图像质量也设置为 90。

我使用这个简单的 Bash 脚本来处理我想要的图像,这些图像分辨率相对较高,但同时也适合网络。但您可以调整和调整该命令以满足您的需求。真正的魔力find在于遍历目录树并覆盖图像的逻辑。通过这样做,文件的创建日期会保留,只有修改日期会更改。

答案2

我花了几个小时试图弄清楚为什么我的一些图片在转换时没有保留日期,甚至没有mogrify -define preserve-timestamp=true,我发现了以下内容:

报告

看起来文件“出生日期”很重要(尤其是对于 Apple Photos)。您可以通过以下方式访问它:stat -x pic.jpg您将获得类似以下内容:

  File: "pic.jpg"
  Size: 186321       FileType: Regular File
Access: Thu Apr 11 09:19:19 2024
Modify: Tue Jan  5 09:14:41 2021
Change: Thu Apr 11 09:19:18 2024
 Birth: Mon Jan  4 16:40:00 2021 ← here is the important one !

工具

stat

正如我所说,preserve-timestamp似乎没有保留出生日期,所以我一直在使用stat命令来获取出生日期:

$ stat -f "%SB" -t "%Y:%m:%d %T%z" pic.jpg
2021:01:04 16:40:00+0100 ← to get a clean birth date
$ stat -f "%Sm" -t "%Y:%m:%d %T%z" pic.jpg
2021:01:05 09:14:41+0100 ← to get a clean modify date

exiftool

并将exiftool其保存在转换后的文件中:

exiftool "-FileCreateDate=2021:01:04 16:40:00+0100" "-FileModifyDate= 2021:01:05 09:14:41+0100" pic.heic

结果为一行

下面是我从 Apple Photos 导出后(从文件名上的智能文件夹过滤包含“jpg”)转换jpg为的示例:heic

for i in *.jpg ; 
do convert $i "${i%.*}.heic" 
&& exiftool -q "-FileCreateDate=$(stat -f "%SB" -t "%Y:%m:%d %T%z" "$i")" "-FileModifyDate=$(stat -f "%Sm" -t "%Y:%m:%d %T%z" "$i")" "${i%.*}.heic" ; 
done

它相当慢(1700 张照片/1.5 Go 需要 30 多分钟……),但我得到了我想要的结果,出生日期完全相同(尺寸从 1.5Go 缩小到 530Mo)。我可以heic在 Apple Photo 中添加图片,它们将被放置在正确的位置。希望这能有所帮助!

相关内容