Home > レンタルサーバー | 備忘録 > PHPスクリプトからImageMagickを使う

PHPスクリプトからImageMagickを使う

前回の記事で、PHPでGDライブラリを使ってサムネイル作成に失敗する話を書いた。
PHPでサムネイル作成に失敗する

メモリー不足が原因なので、heteml(ヘテムル)共用サーバーを使っている限りどうしようもない。

heteml(ヘテムル)では、ImageMagickが使える、という情報を得て、PHPからImageMagickのコマンドconvertを呼び出して使ってみた。
結果はばっちり。これで大きな写真(画像)の縮小も容易にできる。ひとまず、サーバーサイドで片付いたのでよかった。

サムネイル(縮小)画像生成に使ったパラメータと、指定領域の切り取り処理のパラメータ、両方のコマンドライン文字列をメモしておく。

【サムネイル作成】
$width = 600;
$height = 600;
$src_file = “input.jpg”;
$dis_file = “output.jpg”;
$cmd = “/usr/bin/convert -thumbnail {$width}x{$height} ‘$src_file’ ‘$dis_file'”;

【指定領域切り取り】(画像左上から600×600ピクセルの領域を切り取り)
オフセットの指定において符号(+/-)は必須なので注意してほしい。
$src_w = 600;
$src_h = 600;
$offset_x = “+0”;
$offset_y = “+0”;
$src_file = “input.jpg”;
$dis_file = “output.jpg”;
$cmd = “/usr/bin/convert -crop {$src_w}x{$src_h}{$offset_x}{$offset_y} ‘$src_file’ ‘$dis_file'”;

(*)JPEGの品質を指定したい場合は、ファイル名の前あたりにでも、「-quality 品質値」を追加して、
$cmd = “/usr/bin/convert -crop {$src_w}x{$src_h}{$offset_x}{$offset_y} -quality 85 ‘$src_file’ ‘$dis_file'”;
などと記述する。サムネイル作成も同じコマンドで指定できる。

インストール先に応じてconvertコマンドのパス名は変更して欲しい。CentOSも上記のパス名だった。
コマンドの起動にはexec()関数を使えばよいだろう。こんな感じ。

$output_arr = array();
$return_value = “”;
exec( $cmd, $output_arr, $return_value );

出力文字列と、実行結果(整数値)はそれぞれ$output_arrと$return_valueに入っているので、
処理結果に応じて対処すること。

ImageMagickのconvertコマンドを久しぶりに使ったが、今回は随分と楽に感じた。
数年前に初めて使った時はImageMagick使うのにコマンド名は何でImageMagickでないのか
疑問に思ったりした。機能を提供するコマンドが複数あるだけで、ImageMagickは総称と思っているが、さて、どうなんでしょう。
しかし、今は日本語の本が何冊も出てるんですね。以前は見つけられなかったような気がするのですが。

今回、参考にしたURLは以下の通り。

【参考文献】(英文)
http://www.imagemagick.org/script/command-line-options.php