LoginSignup
4
5

More than 5 years have passed since last update.

Imagickでサムネイル画像を生成する

Posted at

色んなサイズの画像を、指定した大きさ&比率的にはみ出る部分は切り落とすサムネイル画像を生成するには、cropThumbnailImageを使うと簡単にできます。

cropThumbnailImage.png

が、縦長の画像は、人物の画像だったりすると、顔が切れるという残念な結果になるので、『縦長の画像は上部が重要』という仮説のもと、縦長画像は上の方を切り取るようにします。

cropThumbnailImageP.png

$im = new Imagick(realpath($file_path));
$size = $im->getImageGeometry();
if ($size['width'] < $size['height']) {
    // 縦長なので上部を正方形に切る
    $im->cropImage($size['width'], $size['width'], 0, 0);
}
$im->cropThumbnailImage($thumbnail_width, $thumbnail_height);
$im->writeImage($thumbnail_path);

東京タワーとか高層ビルとかの縦長画像でも、真ん中切り取るより上の方切り取るほうがいいと思うので、簡単だし、まぁ良さそうかな。

ちなみにImageMagickは相対パスだとうまく読み込まなかったりするので、realpath()を使っています。
ただしrealpath()は存在するファイルやディレクトリに対してしか使えないので、新しく作成する画像のパスに対して$im->writeImage(realpath($thumbnail_path))とかやるとダメです。
その場合は$im->writeImage(realpath($thumbnail_dir) . '/new_file.jpg')とかにする必要があります。

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5