投稿日検索
2015年8月
 12
3456789
10111213141516
17181920212223
24252627282930
31  

カテゴリー検索

【お知らせ】
●2013年1月以降の投稿をRetinaディスプレイに対応

最新のコメント
  1. はじめまして.現在,こちらの車両群を管理している団体の者です. 2004年時点…

,

シェルスクリプトで画像処理(6)ImageMagick編2

お題
透過ファイルを使わずに透かし文字を入れる

前回の記事「シェルスクリプトで画像処理(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

のようにファイルに出力した方が使い勝手が良いでしょう


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)