PHPでImageMagick
ImageMagickをPHPで使用する手段として、「PECL :: Package :: imagick」がある。
しかしながら、PHPのマニュアルにはImagickクラスについての情報が少ないのです。(なんでだろ?)
既にImageMagickを使っている人なら問題ないのかもしれない(?)ですが、私のようなヘタレSEには困った状態です。
模索しながらですが、いろいろと試してみました。
1)インストール
まずはインストールから。
参考にしたのはこちら。
CodeZine最高だぜ!と思って普通に 「pecl install imagick」 を実行!
…phpizeが無いと怒られた。
調べてみると、どうやら「php-devel」に含まれている模様。
まずはこっちからか。。。と思って「yum install php-devel」を実行。
ここでリポジトリの追加を忘れていてハマりまくった…orz
凡ミスであればあるほどショック大きいです。。;;
気を取り直して。
php-develはインストールできましたので、改めて「pecl install imagick」を実行。
今度は素直に入ってくれましたw
php.iniに「extension=imagick.so」を追記すればインストールは完了。
2)使ってみる
さて、早速使ってみましょうか。
たとえばこんなコードがあったとします。
※php-gdはインストールされているものとします。
※例によって、実際にコードをこのまま使うのは危険ですからね!
<?php
if(!empty($_GET)){
$filename = $_GET[“f”];
}else{
echo “Error”;
exit();
}$data = pathinfo($filename);
$info = getimagesize($filename);
$mime = $info[‘mime’];header(‘Content-type: ‘.$mime);
echo readfile($filename);?>
$_GET[“f”]としてファイル名を渡してあげると、それを表示するというだけの単純な仕組みです。
これだけならGDモジュールで充分ですが、ImageMagickのすごいところはここからの処理です。
例1)画像サイズを任意に変換できるようにしてみる
さて、さっきのコードを書き換えてみます。
<?php
if(!empty($_GET)){
$filename = $_GET[“f”];
}else{
echo “Error”;
exit();
}$img = new Imagick();
$img->readImageBlob(file_get_contents($filename));
# 拡張子を取得
$data = pathinfo($filename);
$ext = $data[‘extension’];# 扱う画像の種別
$img -> setImageFormat($ext);# サイズ変換
$img->thumbnailImage($_GET[“width”],$_GET[“height”]);# 圧縮
$img->setCompressionQuality(80);$info = getimagesize($filename);
$mime = $info[‘mime’];
header(‘Content-type: ‘.$mime);
echo $img;?>
$_GET[“width”]と$_GET[“height”]を与えてあげると、そのサイズに縮小してくれるようになりました。
ちなみに縦横比を維持したい場合は、基準になる値だけ指定して、
もう一つを「0」とすれば(width=100&height=0とか)OKです。
簡単ですね。ではもう一歩進めてみます。
例2)コントラストを変えてみる
さてまたコードをいじります。
<?php
if(!empty($_GET)){
$filename = $_GET[“f”];
}else{
echo “Error”;
exit();
}$img = new Imagick();
$img->readImageBlob(file_get_contents($filename));
# 拡張子を取得
$data = pathinfo($filename);
$ext = $data[‘extension’];# 扱う画像の種別
$img -> setImageFormat($ext);# サイズ変換
$img->thumbnailImage($_GET[“width”],$_GET[“height”]);# コントラスト
$img->normalizeImage($_GET[“contrust”]);# 圧縮
$img->setCompressionQuality(80);$info = getimagesize($filename);
$mime = $info[‘mime’];
header(‘Content-type: ‘.$mime);
echo $img;?>
$_GET[“contrust”]で値を渡すと、コントラストを変えてくれます。
さて、なんだか予想がついてきましたでしょうか…?
こんな簡単な変更で(頑張れば)フォトショ並みの加工を施すことができるのです!(言いすぎか?)
他の処理内容についてはマニュアルをどうぞ。
※冒頭でも述べましたが、情報が少ないです!
引数のリストは記載されていますので、色々模索してみても楽しそうです。