TL;DR
- ImageMagickだけで,画像に文字を重ね張りする仕組みを作ります
- 連続した複数の画像の隅に,数字(ページ番号など)を合成します
手順概要
- 文字列が画像になっている,背景色が透明のテキストイメージを作ります
- 対象画像(文字を書き込みたい画像)に,テキストイメージを合成します
- 上記の2手順を,連番のファイルに対して実施します
写真はフリー素材ぱくたそさんから,何か用ですか?(猫)をお借りしました.
各手順の実施に必要な部品
画像の情報を得る
- 画像の形式,サイズ,カラー情報は,
identify
コマンドで得ることができます
$ identify TOMcatDSC02022_TP_V4.jpg
TOMcatDSC02022_TP_V4.jpg JPEG 800x450 800x450+0+0 8-bit sRGB 76326B 0.000u 0:00.000
m
単色の画像を作る
- 800x450ピクセルの,背景色が透明な単色画像 transparent.jpg を作ります
- 青(#0000FF)の単色画像 blue.jpg を作ります
convert -size 800x450 xc:none transparent.jpg # 背景色が透過の画像を作る
convert -size 800x450 xc:"#0000FF" blue.jpg # 背景色が青の画像を作る
Option | 説明 |
---|---|
-size | 画像サイズ( 縦 x 横 ) |
xc:"#0000FF" | 画像(背景)色をカラーコードで指定(例は青色.透明色の場合はnoneにする) |
*.jpg | 出力画像名(jpg, png) |
テキストイメージ(文字が書き込まれた画像)を作るコマンド
- 前項の単色画像を作るコマンドにオプションを加えて,テキストイメージを作ります
- 800x450ピクセルの画像で,テキストイメージを作ります
- 背景が透過色の場合は,png形式のファイルで出力してください(jpgだとnone指定だと黒色になる)
convert -font Helvetica -size 800x450 \
-fill "#FFFFFF" \
-background "#000000" \
-pointsize 80 \
caption:"textImage" \
textImage.png
Option | 説明 |
---|---|
-size | 画像サイズ( 縦 x 横 ) |
-font Helvetica | フォントの指定(convert -list fontで確認できる) |
-fill "#FFFFFF" | 文字色のカラーコード |
-background "#000000" | 背景色のカラーコード(none使用可能,透過の場合はpngファイルで出力してください) |
-pointsize 80 | フォントサイズ(単位はpt) |
caption:"textImage" | |
textImage.png | 出力画像名(jpg, png) |
2枚の画像を合成する
- 透過背景色のテキストイメージと,テキストイメージを貼り付けたい画像を合成します
-
convert
は日本語の文字を含んでいないようなので,fontオプションで,フォントファイルを指定します - コマンド例はMacOS OSX10.13.6 の場合です
-
# 透過テキストイメージ(背景色透明なのでpng)の作成
convert convert -font "/System/Library/Fonts/ヒラギノ丸ゴ ProN W4.ttc" \
-size 800x450 \
-fill "#FFFFFF" \
-background none \
-pointsize 80 \
caption:"何か用ですか?" \
textImage.png
# 画像の合成
composite -compose over \
./textImage.png \
./TOMcatDSC02022_TP_V4.jpg \
output.jpg
-
composite
コマンドのオプションの概要は以下のとおりです.
Option | 説明 |
---|---|
-compose | 重ね合わせの方法(overなど) |
textImage.png | 背景色透過のテキストイメージ(重ねる方の画像) |
TOMcatDSC02022_TP_V4.jpg | 猫の画像(重ねられる方の画像) |
output.jpg | 出力画像 |
Putting Together
- 前項までのコマンドを,シェルスクリプトでループ実行します
# (必要であれば)テスト用画像の生成
for i in `seq -w 1 100`
do
convert -size 800x450 xc:"#0000FF" blue${i}.jpg
done
- blue1.jpgからblue100.jpgまでの画像についてテキストを書き込みます
# テキストイメージを生成して画像に重ね合わせ
for i in `seq -w 1 100`
do
convert -font "/System/Library/Fonts/ヒラギノ丸ゴ ProN W4.ttc" \
-size 800x450 \
-fill "#FFFFFF" \
-background none \
-pointsize 80 \
caption:$i \
textImage.png
composite -compose over \
./textImage.png \
./blue${i}.jpg \
output${i}.jpg
rm -f textImage.png
done