在 Mac OS X 中批次調整映像大小而不更改建立日期

在 Mac OS X 中批次調整映像大小而不更改建立日期

我有很多圖像需要調整大小,但我不想更改創建日期。我嘗試使用 Automator、Photoshop、Preview,每次使用這些軟體時,這些軟體都會更改我的圖片的建立日期。

如果有人有想法?

答案1

我有很多圖像需要調整大小,但我不想更改創建日期。我嘗試使用 Automator、Photoshop、Preview,每次使用這些軟體時,這些軟體都會更改我的圖片的建立日期。

您是否混淆了建立日期和修改日期?因為最終,如果文件被修改,文件的建立日期永遠不應該改變;這就是修改日期的目的。

雖然我不確定您使用什麼方法來調整圖像大小,但據我所知,如果您要獲取圖像目錄,然後告訴腳本根據來源圖像創建派生圖像,則新創建的派生圖像將具有新的創建日期,因為它只是以某種方式處理的原始副本的新副本。

但是假設您有一個目錄,其中充滿了您想要處理並本質上覆蓋的圖像,我建議您安裝並使用出色的命令列工具圖像魔術師。如果您不習慣透過官方二進位檔案安裝適用於 Mac OS X 的 ImageMagick(該二進位檔案運作良好,但如果您不熟練執行命令列操作,可能會感到困惑),這不錯的 Mac OS X 軟體包安裝程式由 Cactuslab 提供。或者你甚至可以透過安裝 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(每吋像素)單位進行轉換,如果影像大於,則根據影像的最長邊將影像大小調整為 1500x1500 像素寬/高最長邊為1500 像素。影像品質也設定為 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

結果為一行

jpg這是我從 Apple Photos 匯出後轉換為的範例heic(從檔案名稱上的智慧型資料夾過濾包括「jpg」):

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 張照片 30 分鐘以上/1,5 Go…),但我得到了我想要的結果,出生日期完全相同(尺寸從 1,5Go 縮小到 530Mo)。我可以在 Apple Photo 中添加heic圖片,它們將放置在正確的位置。希望這能有所幫助!

相關內容