12
9

More than 5 years have passed since last update.

画像に文字を重ね貼りするコマンドライン処理(ImageMagickでテキストイメージ生成+合成)

Last updated at Posted at 2019-04-03

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
  • 作られる画像たち
    • convert -delay 10 -loop 0 output*.jpg movie.gif でアニメーションGIFを作りました

参考

12
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
9