Web制作メモ -トップへ-

[ImageMagick] PHPでconvertコマンドを使用する

Web全般2014.12.19 17:16

converコマンドはPHPからはsystem()で実行できます。

まずは、画像の向きを正しくしつつEXIF情報を削除してみます。

-auto-orientでEXIF情報から向きを自動設定し、-stripでEXIF情報を含む余分な情報を削除します。

画像の向きを正しくしつつEXIF情報を削除

$src = '変換元のファイルのパス';
$dst = '変換後のファイルのパス';
system('/usr/bin/convert -auto-orient -strip '.$src.' '.$dst);
unlink($src); //変換元のファイルが不要なら削除

次に、画像が一定のサイズより大きい場合のみ縮小してみます。

マニュアルによると、画像が一定のサイズより大きい場合にのみ縮小するには、-resize>を使うと記載されていますが、これはなぜか上手く動きません。

PHPからsystem()でconvertコマンドを呼び出して使っていますが、この使い方だとダメなのか、はたまた指定の仕方が悪いのかは分かりません。

仕方がないので、getimagesize()で画像の幅を取得して、一定のサイズより大きかった場合のみconvert()するようにしています。

横幅が400pxより大きい場合に縮小

$src = '変換元のファイルのパス';
$dst = '変換後のファイルのパス';
$wh = getimagesize($src);
if($wh[0] > 400){
    system('/usr/bin/convert -resize 400x '.$src.' '.$dst);
}else{
    copy($src, $dst); //指定サイズより大きい場合はそのままコピー
}
unlink($src); //変換元のファイルが不要なら削除

最後にトリミングする方法です。トリミングは-cropを使います。cropとは英語で現像前に写真を切り抜くことで、トリミングは写真完成後にハサミなどで切り抜くことだそうです。

10,20(X,Y座標)から100×200px(幅と高さ)でトリミング

$src = '変換元のファイルのパス';
$dst = '変換後のファイルのパス';
system('/usr/bin/convert -crop ' . 100x200+10+20 .' '. $src .' '. $dst);
unlink($src); //変換元のファイルが不要なら削除

参考リンク