web-dev-qa-db-ja.com

画像ファイルの隅にファイル名をテキストとして追加する

Jpeg画像がたくさんあります。 001abcd.jpg002abcd.jpgなどと発声してください。

ファイル名をキャプチャして、画像自体の1つのコーナーにテキストとして追加します。したがって、結果は、たとえば、ファイル003abcd.jpgには、その画像の1つのコーナーに「003abcd」が刻印されます。 (拡張子はそこにある必要はありません。)

何百もの画像をバッチ処理して、それぞれの画像に独自のファイル名を追加できる端末コマンドが必要です。

Linux Mint 17を使用しています。

Imagemagickは便利だということが何かでわかりますが、スクリプトについては知りません。

すべての画像に単一の共通テキストを入れるのは簡単です。しかし、一意のファイル名をそれぞれの画像のテキストとして一度に配置する方法がわかりません。

6

mogrifyはバッチ処理を行うため、次のようなものを使用できます(好みに応じて、フォント、サイズ、色、位置などを変更します):

mogrify -font Liberation-Sans -fill white -undercolor '#00000080' \
-pointsize 26 -gravity NorthEast -annotate +10+10 %t *.jpg

拡張子なしのファイル名を追加するには(%t)現在のディレクトリ内のすべてのjpgsに、たとえばorca-lm-1.jpg

enter image description here

これによりファイルが上書きされるため、バックアップコピーがあることを確認してください。
出力ファイルに別の形式(pngなど)を使用すると、元のファイルは変更されません。

mogrify -format 'png' -font Liberation-Sans -fill white -undercolor \
'#00000080' -pointsize 26 -gravity NorthEast -annotate +10+10 %t *.jpg
7
don_crissti

実際、ImageMagickを使用して text を画像に書き込むことができます。 convert ユーティリティを使用して画像を新しいファイルに変換します(またはmogrifyを使用してファイルを所定の場所に変換しますが、お勧めしません。間違えると、オリジナルが失われます)。 -annotate オプションを使用してテキストを指定します。これには、ディレクトリや拡張子のないファイル名の%tなどの エスケープシーケンス を含めることができます。位置、サイズ、フォント、色などを制御できる多くのオプションがあります。

ファイルが現在のディレクトリのoriginalというサブディレクトリにあるとします。ディレクトリlabeledを作成します。

mkdir labeled

画像を変換するには、次のようにconvertを呼び出します。

convert original/001abcd.jpg -fill green -pointsize 20 -annotate +0+0 %t -gravity north-east labeled/001abcd.jpg

-annotateの後の最初のパラメーターは、テキストの場所を示すジオメトリです。 +0+0は角です。 -gravity north-eastは、これが右上隅であることを示しています。 2番目のパラメーターはテキストです。これは、「ファイル名を使用する」というエスケープシーケンスです。

ディレクトリ内のすべての.jpgファイルを変換するには、ループを記述します。ワイルドカードパターン*.jpg.jpgファイルのリストを表し、このループはoriginalディレクトリ内のすべての.jpgファイルに作用します。ループ本体では、"$x"はディレクトリ部分を含むファイル名を指します。 "${x##*/}"は、ディレクトリ部分のないファイル名を指します。

for x in original/*.jpg; do
  convert "$x" original/001abcd.jpg -fill green -pointsize 20 -annotate +0+0 %t -gravity north-east "labeled/${x##*/}"
done