PHPでの画像処理【ImageMagick編】
こんにちは。sagaraです。年齢が20代も後半に差し掛かるのですが、
この間スーパーでお酒を買おうとしたら、久々に年齢確認を要求されてしまいました。
てへぺろやあーねを知っているので、気持ち今でも10代です☆←
今回は、PHPのImageMagick(画像処理モジュール)についてのお話です。
ImageMagickとは
ImageMagickは画像処理のためのソフトウェアで、
PHPに限らない様々な言語で使うことができます。
PHPでImagickというモジュール名になっています。
前回の記事のGD拡張モジュールもそうですが、
サーバー側でサムネイルを自動生成したり、
不正コピー防止のために画像に透かしを入れたりするときに使えますね。
ImageMagickは高機能ですので、より使える場面は増えるのではないでしょうか。
インストールから使用準備まで
GDはPHP自体に標準で含まれていますが、ImageMagickは標準では含まれていません。
ですので、使用するためにはインストールする必要があります。
レンタルサーバ利用の場合は、初めからインストールされていることが多いようです。
phpinfo()を出力して、imagickの項目があればOK!
なければ、インストールする必要があります。
imagick拡張モジュールをpeclコマンドでインストール(CentOS 7)
PHPではImageMagickの拡張モジュール名はImagickです。
peclコマンドを使ってインストールします。
もしpeclコマンドが使えない場合は、pearをインストールします。
sudo yum -y install php-pear # pearのインストール
また、事前にImagickのインストールに必要な以下のパッケージもインストールしておきます。
sudo yum -y install ImageMagick-devel
sudo yum -y install php-devel
そしてImagickのインストール。
途中プレフィックスの指定を聞かれますが、ここではimagickとしておきます。
sudo pecl install Imagick
...
Please provide the prefix of Imagemagick installation [autodetect] :
インストールが完了したら、php.iniのどこかに extension=imagick.so
を追記します。
sudo vi /etc/php.ini # extension=imagick.so をファイル内に追記。
最後にサーバを再起動します。
sudo apachectl restart
実際に使ってみた。
簡単なものですが、実際にImagickを使って、
森林(たしか高尾山で撮影)の画像にバシャログのロゴの透かしを入れてみました。
元画像はこちら。
sample.php
<img src="./image.php">
image.php
<?php
//画像リソースを読み込み
$background = new Imagick('./forest.jpg'); //背景
$watermark = new Imagick('./bashalogo.png'); //透かし
$wm_sx = 250; //透かし画像の幅
$wm_sy = 250; //透かし画像の高さ
//画像のリサイズ
$watermark->sampleImage($wm_sx, $wm_sy);
//画像を合成する(背景の中央に透かしを配置)
$background->compositeImage($watermark, Imagick::COMPOSITE_SOFTLIGHT,
($background->getImageWidth() - $wm_sx) / 2, ($background->getImageHeight() - $wm_sy) / 2);
//出力
header('Content-type: image/jpg');
echo $background;
new Imagick
でインスタンスを生成し、各メソッドで画像を加工していきます。
画像の合成では第二引数に合成演算子用定数を指定することで、いろいろな効果を楽しめます。
今回はImagick::COMPOSITE_SOFTLIGHT
(ソフトライト)を指定しました。
出力時にはヘッダ情報を送信してから出力しています。
出力
おわりに
メソッドが本当にたくさんあって、もっと色んなことができるんだろうなぁと思いながら
使い方が分かりづらいのもたくさんありますね…。
ImageMagickの画像処理自体はコマンドラインでもバリバリ動かせるようですので、
本格的に画像処理をするならこちらもチェックするのが良さそうですね。