這裡介紹如何在 Linux 系統中使用 ImageMagick 來在照片上加入拍攝日期與時間的標示。

現在的數位相機或是手機在拍攝相片時,都會將拍攝時的各種參數寫入照片的 EXIF 資訊中,這中間當然也包含了拍攝的日期與時間,雖然我們可以使用各種的看圖軟體來取出這些資訊,但是如果您要將照片沖洗出來時,可能就會需要將日期與時間直接印在照片上。


如果只是一兩張照片,您可以用人工的方式,使用照片編輯軟體直接打上日期與時間,但是如果照片的數量很多的時候,人工就無法處理了,這時候我們可以使用 ImageMagick 配合簡單的 shell 指令搞,自動將照片 EXIF 資訊中的日期與時間取出來,然後印在照片上,這個方式在處理大量照片時非常方便。

首先安裝 Imagemagick,若在 Ubuntu Linux 中可以使用 apt 安裝:

apt-get install imagemagick

使用 convert 指令在照片上加上日期與時間戳記:

#!/bin/sh
for img in *.jpg; do
  convert "$img" 
    -gravity SouthEast 
    -pointsize 48 
    -stroke '#000C' 
    -strokewidth 2 
    -annotate +20+20 %[exif:DateTimeOriginal] 
    -stroke none 
    -fill white 
    -annotate +20+20 %[exif:DateTimeOriginal] 
    "time_$img";
done

這個指令稿會將目前目錄的照片(所有 *.jpg 檔)加上日期與時間戳記之後,在原本的檔案名稱之前加上 time_,然後另存成一個新的檔案。

其中 gravity 參數可以指定文字的位置,指定為 SouthEast 可以讓時間戳記顯示在照片的右下角,如果您想要更改文字的位置,可以修改這個參數來調整,在 Imagemagick 的說明文件中有列出所有可以用的參數值。

pointsize 就是字型的大小,這個數值也是可以直接依照自己的需求調整的。

這裡我們使用白色的文字來印上時間戳記,但是如果碰到照片剛好也是白色的時候,白色的字就會不明顯,甚至完全看不到,所以我們這裡是先印上灰色的陰影,在印上白色的字體,這樣就算遇到白色的照片,印上去的時間戳記還是可以看的到。

pointsize 之後的三行 strokestrokewidthannotate 就是印上灰色陰影的指令參數,這個 stroke 可以指定陰影的顏色,而 strokewidth 則是可以調整陰影的寬度。

而之後的三行 strokefillannotate 則是用來指定文字樣式的參數,fill 可以調整文字的顏色,顏色的指定可以使用下面者幾種格式:

-fill blue
-fill "#ddddff"
-fill "rgb(255,255,255)"

詳細用法可以參考 Imagemagick 的說明文件

最後的 "time_$img" 就是輸出的圖檔檔名,如果要使用自己的命名規則,就可以從這裡修改。

以下我使用兩張照片做為示範,一張是深色的狀況,而另一張是淺色的:

imagemagick-time-stamp-1

imagemagick-time-stamp-2

加上日期與時間戳記後,會像這樣:

imagemagick-time-stamp-3

imagemagick-time-stamp-4

參考資料:Digital Photography Tips and TechniquessuperuserImageMagick