QUOIT Blog

PHPでImageMagick

この記事は7年以上前の記事です。情報が古い場合がありますのでお気を付け下さい。

ImageMagickをPHPで使用する手段として、「PECL :: Package :: imagick」がある。

しかしながら、PHPのマニュアルにはImagickクラスについての情報が少ないのです。(なんでだろ?)

既にImageMagickを使っている人なら問題ないのかもしれない(?)ですが、私のようなヘタレSEには困った状態です。

模索しながらですが、いろいろと試してみました。

1)インストール
まずはインストールから。
参考にしたのはこちら。

PHPライブラリ「Imagick」で携帯の機種に応じた画像を表示する(1/3):CodeZine

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”]で値を渡すと、コントラストを変えてくれます。

さて、なんだか予想がついてきましたでしょうか…?

こんな簡単な変更で(頑張れば)フォトショ並みの加工を施すことができるのです!(言いすぎか?)

他の処理内容についてはマニュアルをどうぞ。

PHP: ImageMagick – Manual

※冒頭でも述べましたが、情報が少ないです!

引数のリストは記載されていますので、色々模索してみても楽しそうです。

Comments are closed.