ImageMagick でテキスト文字を画像に反映させる方法とバグ
サーバー上で、テキスト文字を含んだ画像を生成したいことがありました。
ImageMagickのテキスト文字を画像として出力するときは、convertコマンドを使って実行しますが実はこれがうまく動作しない現象が発生していました。
> convert -font "msmincho.ttc" -pointsize 30 -size 240x320 label:@message.txt sample.jpg |
で実行します。
詳細のオプションの内容などはもっと詳しいサイトがあるのでそちらに譲りますが、簡単にご説明。
pointsize : 文字サイズ
size : 精製される画像の縦横のサイズ
label : 書き出したいテキストの内容
そして、最後に出力画像ファイル名
おそらくこれで問題無く出来るだろうと実行したものの、まず pointsize が無視されます。
どんなサイズにしても文字サイズは変わりません
そして、message.txtには、複数行の文字データが書かれているのですが1行しか表示されません
作成対象となるサーバーで使用しているImageMagickのバージョンは、6.0.7 でした。
これが問題でした。
ImageMagick は、6.2.7移行でないと、pointsize命令にバグがあるらしく正しく動作しない様子。
仕方がないので、現在の最新版である 6.7.3 をダウンロードしてインストールをします。
■Image Magick
https://www.imagemagick.org/
しかし、サーバーの環境上ImageMagickが既に多用している為上書きしてしまうのは安直すぎます。
そのとめ、上書きをせずに別の位置にインストールさせることで対応をしてみることにします。
そのためソースコードからコンパイルをします。
上記から取得してきたソースコードを作業用ディレクトリに取得して、展開します。
> wget ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick-6.7.3-4.tar.gz > tar zxvf ImageMagick-6.7.3-4.tar.gz > cd ImageMagick-6.7.3-4 |
展開したディレクトリに入って、ソースコードのコンパイルをします。
ここでは、configureを使ってソースコードのMakefileを作ります。
そこで明示的に現在のImageMagickては別の位置にインストールされるように prefix オプションを使いって指定しました。
その他のオプションは基本的にデフォルトで問題なさそうなので、他の設定はデフォルトで問題無いと思います。
> configure –prefix=/usr/local/im
> make
> make install
これで、/usr/local/im の位置に 6.7.3-4 の新しいImageMagick がインストールされました。
最初のコマンド
> convert -font "msmincho.ttc" -pointsize 30 -size 240x320 label:@message.txt sample.jpg |
上記を下記
> /usr/local/im/bin/convert -font "msmincho.ttc" -pointsize 30 -size 240x320 label:@message.txt sample.jpg |
とすることで無事、複数行も文字サイズの変更も出来るようになりました。
関連のありそうなエントリ