お題
透過ファイルを使わずに透かし文字を入れる
前回の記事「シェルスクリプトで画像処理(3)ImageMagick編」では、あらかじめ作成しておいた透かし画像をレイヤーする方法を採っていました
まぁ当たり前過ぎる手法ではありますが、透かし画像を外部ファイルで持たなくてはならないので、パスの管理に気を使う必要がある上に、透かしの内容そのものが変わったり、画像サイズが変わってしまうと結局PhotoshopやGIMPのお世話にならざるを得ないわけで、今ひとつスマートではありません
ImageMagickの使い方をいろいろ調べて行くと、かなり自由に画像を生成したり、文字を入れることができることが解りました
最初は透過チャンネルを持ったpng画像ファイルを生成して、従来通りレイヤーするというスクリプトも組んでみましたが、直接透過文字を入れる方法を見つけたので、そちらを本採用しました
convertを使うことに変わりありませんが、オプションを駆使することで
透かし文字を生成することができます
-pointsize 文字サイズの指定
フォントサイズをポイント数で指定
-gravity 文字位置の指定
キャンバス内での位置 west/east/north/southで左右上下 中央はcenter
southwest のような書き方もできて、この場合は左下になる
-fill 文字色の指定
“#FFFFFF80” のようにクォーテションで囲った16進数8桁で表現
上位2-2-2桁が御馴染みのRGB表現で、下位2桁が透過度を表す
-font フォント種指定
必ずパス付きでフォントファイルを指定すること
またフォント名に半角スペースがある場合はバックスラッシュでエスケープしないとエラーになる
-annotate 傾き(角度)の指定、上下位置調整
数字単独だと角度を表す
-gravityで指定した文字位置を微調整する場合はピクセル単位で +X+Y のように指定
この数字は、中心(center)に向かってのオフセットになる
つまり同じ数値でもnorthだと下方、southだと上方に移動するので要注意
フルに記述すると 角度x文字斜体+X位置+Y位置 となる
最後にクォーテションで囲った文字列を記入して、jpeg圧縮をする場合はその後に
-qualityオプションを入れると良いでしょう
例えばこのブログで通常使う透かし(3:2横長 jpeg90%)処理だとこうなります
convert -pointsize 74 -gravity center -fill "#FFFFFF20" -font /Library/Fonts/ヒラギノ角ゴ StdN W8.otf -annotate -32 "http://psychic-wave.com" -quality 90 input.jpg output.jpg
なげーよ!ヽ(`Д´)ノ
一行が長過ぎするのと、オプションが多くて解りにくいのでエスケープ改行で整理しても良いでしょう
convert -pointsize 74 -gravity center -fill "#FFFFFF20" -font /Library/Fonts/ヒラギノ角ゴ StdN W8.otf -annotate -32 "http://psychic-wave.com" -quality 90 input.jpg output.jpg
これで透かし文字はスクリプト単体で管理でき、必要に応じてテキストを弄るだけで良いので、管理が恐ろしく楽になりましたo(*^▽^*)o
—追記
使用できるフォント情報(パス/フォント名)は
convert -list font
で(σ・∀・)σゲッツ!できます
標準出力だとリストが長過ぎるので
convert -list font >fontList.txt
のようにファイルに出力した方が使い勝手が良いでしょう
DLのたびに通知が出てすごく邪魔だったんで助かりました。