2024/03/18(月)写真画像ファイルにフィルム写真風の日付を挿入するシェルスクリプト
これは,仕事の写真の説明や保存管理にも使えるでしょうし,
手抜きのフォトアルバムを作るのにも使えそうです.
※改良版の“改3”を作成し,内容を整理しました.以下よりはわかりやすいと思いますので,適宜参照してください.
処理結果は次のような感じになります*1.

日付情報は,通常写真ファイルに埋め込んであるので,それを読み出して写真画面上に描き込みます.
7セグ・14セグフォント 「DSEG」から,14セグメントなフォントをいただいて*2,それっぽく見せます.
以下のスクリプトはWSL上のDebian 12で動作確認しました.
Debian 12のImageMagickは6.9系なのでmagickコマンドではなく,昔ながらのidentifyやconvertコマンドです.
ImageMagick7系の場合は書き換える必要があります.
引数の処理対象のリストファイルはUNIX系のパス記述方法で記載します.lsの出力結果を整形するのが良さそうです.
#!/bin/bash # 引数の説明 # $1: 操作対象パス(ファイル)リストが記載されたファイル. # SEIREKI_BACKQUOTE="\`" # "`"はグレイヴアクセント.西暦の略記はアポストロフィ“'”. SEIREKI_BACKQUOTE=`echo -e "\U0027"` # グレイヴアクセントや文字コード指定がsed中で上手くエスケープできないので変数に分けた. while read IMAGENAME # $1の各行に記載された画像ファイルのパス. do echo "\"${IMAGENAME}\"の撮影日時の取得……" DateTimeOriginal=`identify -verbose ${IMAGENAME} | grep "DateTimeOriginal" | sed -e "s/^.*exif:DateTimeOriginal: //g" | sed -e "s/ .*$//g" | sed -e "s/:/ /g" | sed -e "s/20/${SEIREKI_BACKQUOTE}/g" ` echo "${DateTimeOriginal}" OUTPUT_IMAGENAME=`echo "${IMAGENAME}.jpg"` echo "出力ファイル名: ${OUTPUT_IMAGENAME}" convert -resize 3096x2064 -font DSEG14-Classic-Bold -fill orange -pointsize 100 -gravity southeast -annotate 0x0+300+150 "${DateTimeOriginal}" ${IMAGENAME} ${OUTPUT_IMAGENAME} done < $1