Wednesday, May 07, 2008

ImageMagickとPHPで、画像を丸く切り取る

Imagickで画像を丸く切り取るには、以下のコードを実行します。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja" dir="ltr">
<head>
<title>sample380</title>
</head>
<body>
<?php
$im = new Imagick('sf.jpg');
$width = $im->getImageWidth();
/* 読み込んだイメージと同じ大きさのマスク用画像を作成 */
$height = $im->getImageHeight();
$mask = new Imagick();
$mask->newImage($width, $height, 'none', 'png');
/* 画像の大きさと同じ円を描画 */
$idraw = new ImagickDraw();
$idraw->setFillColor("#FFFFFF");
$idraw->ellipse($width/2, $height/2, $width/2-1, $height/2-1, 0, 360);
$mask->drawImage($idraw);
/* マスク画像を使用して画像を切り取り */
$mask->compositeImage($im, Imagick::COMPOSITE_IN, 0, 0, Imagick::CHANNEL_ALL);
$mask->writeImage('sample380a.png');

/* cleanup */
/* $idraw->clear(); 2008/09/30追記:destroyと同様にClearDrawingWandを呼ぶので必要なし */
$idraw->destroy();
/* $mask->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$mask->destroy();
/* $im->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im->destroy();
?>

<img src="sample380a.png" />
</body>
</html>

元画像(sf.jpg)


出力画像(sample380a.png)


環境
Apache 2.2.8/PHP5.2.5/ImageMagick6.4.0

No comments: