• ベストアンサー

imagemagickトリミングで余白無しにしたい

サーバーの仕様でconvertコマンドにてimagemagickを使用しています サムネイルの作成でどんな写真がきても指定サイズにフィットしてトリミングするにはどの様にするのでしょうか? 現在は下記の様にリサイズ後に中央からトリミングしておりますが、横長写真は上下サイズが指定サイズに足らなくなってしまいます。 -resize 150x -gravity center -crop 150x100+0+0 別途 cropThumbnailImage というものを見つけたのですが、convertコマンドでする方法がわかりませんでした。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • JaneDue
  • ベストアンサー率75% (263/350)
回答No.1

横長の場合は x150 ではなく x100 と縦の方を基準にしてやればよいので、画像の縦横を比較して値を変更すればよいかと。 list($width, $height) = getimagesize(元画像); //横縦サイズ取得 $resize = ($width > $height) ? "x100":"150x"; //横長なら x100 他は 150x exec("convert -resize $resize ~"); ちなみに "convert -define jpeg:size=150x100 -resize $resize ~" とサイズ指定すると早くなります。またcropThumbnailImageを使用したいなら $image = new Imagick("元画像"); $image->cropThumbnailImage(150, 100); $image->writeImage('保存ファイル名'); こっちが簡単かも知れませんね。

asikantama
質問者

お礼

有難うございます list($width, $height) = getimagesize(元画像);//横縦サイズ取得 $resize = ($width > $height) ? "x100":"150x";//横長なら x100 他は 150x にてうまくできました、PHPで画像サイズ取得、応じて縦長か横長に振り分け 勉強になりました cropThumbnailImageは自身のサーバ(convertコマンドでのみimagemagickが使える?)での使用方法が分かららず、PHP内にnew Imagickなどを使うとエラーになってしまいましたが 上記の振り分けの方が色々理解ができ、使用してこうと思います。 合わせてサイズ指定で早くなる方法も有難うございます。