2011年2月16日水曜日

Imagickで画像を正方形にリサイズ

ImageMagickのphp版Imagickを使って画像を正方形にリサイズしたい。

画像を正方形にリサイズする場合、
正方形に切り抜く場合と、余分な背景をうめて正方形にする2パターンがある

<?php
// 正方形に切り取る
$im = new Imagick();
$im->readImage('/home/kasahi/tmp/org.jpg');
$im->cropThumbnailImage(80, 80);
$im->writeImage('/home/kasahi/tmp/resize.jpg');
$im->destroy();
?>

<?php
// 余りの背景を白でうめて正方形にする場合
$im = new Imagick();
$im->readImage('/home/kasahi/tmp/org.jpg');
$sideNum = 300; // 一辺を300ピクセルにする
$im->setImageBackgroundColor(new ImagickPixel('white'));
if ($im->getImageWidth() > $im->getImageHeight()) {
    $im->scaleImage($sideNum, 0); 
    $height = ($sideNum - $im->getImageHeight()) / 2;
    $im->spliceImage(0, $height, 0, 0); 
    $im->spliceImage(0, $sideNum - $im->getImageHeight(), 0, $im->getImageHeight());
} else {
    $im->scaleImage(0, $sideNum);
    $width = ($sideNum - $im->getImageWidth()) / 2;
    $im->spliceImage($width, 0, 0, 0); 
    $im->spliceImage($sideNum - $im->getImageWidth(), 0, $im->getImageWidth(), 0); 
}
$im->writeImage('/home/kasahi/tmp/resize.jpg');
$im->destroy();
?>