unoh.github.com

正方形なサムネイルを簡単に出す

Wed Feb 04 00:41:50 -0800 2009

Keitaです。
バレンタインデーも近づいてきた今日この頃皆様どうお過ごしでしょうか。
例年、僕はとても憂鬱なのですが、今年は、ImageMagickがあるのでとてもハッピーになれそうです。
そんなどうでもいいことはおいて、たまに、Webサービスで正方形でサムネイルを出しているサイトがあると思います。
具体的にいうとこんな感じの画像が
sample
sample posted by (C)フォト蔵
こんな感じの画像になるイメージです。
sample_imagick
sample_imagick posted by (C)フォト蔵

こういう画像をPHPで作る場合には、imagickを使うと簡単に作れます。

<?php
  $width = 200;
  $height = 200;
  //Imagick
  $image = new imagick();
  $image->readImage('sample.jpg');
  $image->cropThumbnailImage($width, $height);
  $image->writeImage('sample_imagick.jpg');
ついでに、MagickWandForPHPで作る場合にはこんな感じで作れます。
<?php
  $width = 200;
  $height = 200;
  //MagickWand
  $image_handle = NewMagickWand();
  MagickReadImage($image_handle, 'sample.jpg');
  $width_org = MagickGetImageWidth($image_handle);
  $height_org = MagickGetImageHeight($image_handle);

  $scale_w = $width / $width_org;
  $scale_h = $height / $height_org;

  $scale = ($scale_w < $scale_h) ? $scale_h : $scale_w;
  
  $width_thumbnail = $width_org * $scale;
  $height_thumbnail = $height_org * $scale;

  $x = ($width_thumbnail - $width) / 2;
  $y = ($height_thumbnail - $height)/ 2;

  MagickThumbnailImage($image_handle, $width_thumbnail, $height_thumbnail);
  MagickCropImage($image_handle, $width, $height, $x, $y);

  MagickWriteImage($image_handle, 'sample_magickwand.jpg');
皆様のご参考になれば幸いです。