こんにちは。
BIG1等を当てたいサラリーマンです。
今回は、ImageMagickライブラリーとImagickモジュールを使っての画像処理エントリーです。
画像にテキストを載せる処理をしたいのでフォントも用意します。
また、こちらのエントリーで構築したローカル開発環境を使います。
もくじ
- パッケージをインストール
- フォントをダウンロード
- サンプルコード
パッケージをインストール
必要なパッケージです。
- php-devel
- php-gd
- ImageMagick
- ImageMagick-devel
- imagick
さっさっさとインストールします。
sudo yum install -y php-devel php-gd sudo yum install -y ImageMagick ImageMagick-devel sudo pecl install imagick
imagickだけは、PECLからインストールします。
次のように進めます。
Please provide the prefix of Imagemagick installation [autodetect] :
Enterで進みます。
Build process completed successfully Installing '/usr/include/php/ext/imagick/php_imagick_shared.h' Installing '/usr/lib64/php/modules/imagick.so' install ok: channel://pecl.php.net/imagick-3.3.0 configuration option "php_ini" is not set to php.ini location You should add "extension=imagick.so" to php.ini
これは、php.iniに追加設定が必要とのメッセージです。
php.iniを編集します。
sudo vi /etc/php.ini
以下を最終行に追記します。
[imagick] extension=imagick.so
続いてApachを再起動します。
sudo service httpd restart
最後に確認コマンドを実行して、GDとimagickが有効になっていればOKです。
php -i | grep -Ei '^(gd|imagic|gmagic|imagemagick)' | grep enabled
GD Support => enabled imagick module => enabled
フォントをダウンロード
今回はスタンダードな感じがいいので、フリーの日本語フォントであるIPAexフォント(ゴシック)を使います。
IPAexフォント/IPAフォント | IPAフォントのダウンロードサイトです
サンプルコード
事前準備としてimagick_sample.phpを新規作成し、ダウンロードしたIPAexフォント(ipaexg.ttf)を同一ディレクトリに格納します。
サンプルの要件は、元画像に対して文字列を上下左右中央にテキストを描画です。
<?php /* 初期化 */ $text = 'こんいちわ!日本語フォント'; $file = 'smp-img.png'; $font = 'ipaexg.ttf'; $color = '#fff'; /* オブジェクトを生成 */ $image = new Imagick($file); $draw = new ImagickDraw(); /* フォントをセット */ $draw->setFont($font); $draw->setFillColor($color); $draw->setFontSize(60); /* ポジションをセット */ $draw->setTextAlignment(imagick::ALIGN_CENTER); /* 画像サイズを取得 */ $width = $image->getImageWidth(); $height = $image->getImageHeight(); /* メトリックを取得 */ $metrics = $image->queryFontMetrics($draw, $text); /* テキストを描画 */ $draw->annotation(($width / 2), ($height / 2) + ($metrics['ascender'] / 2) + ($metrics['descender'] / 2), $text); /* 画像を生成 */ $image->setImageFormat('png'); $image->drawImage($draw); /* 画像を保存 */ file_put_contents('draw-img.png', $image);
PHP: ImagickDraw::annotation – Manual
思い通りの画像を生成することが出来ました!