Thursday, March 05, 2009

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>sample896(ImageMagick6.4.8)</title>
</head>
<body>
<?php
/* 画像をn角形で切り取る */
$numpoints = 5;
/* 半径 */
$rad = 90;
/* 中心 */
$cx = 100;
$cy = 100;

/* n角形をポリゴンで描画 */
$angle = 270;
for($li=0;$li<$numpoints;$li++){
$points[] = array('x' => $cx+cos(deg2rad($angle))*$rad, 'y' => $cy+sin(deg2rad($angle))*$rad);
$angle += 360/$numpoints;
}
$im = new Imagick("sf.jpg");
$im2 = new Imagick();
$im2->newImage($im->getImageWidth(), $im->getImageHeight(), "none");
$im2->setImageMatte(true);
$idraw = new ImagickDraw();
$idraw->polygon($points);
$im2->drawImage($idraw);

$im2->compositeImage($im, Imagick::COMPOSITE_IN, 0, 0, Imagick::CHANNEL_ALL);
$im2->writeImage('sample896a.png');
$idraw->destroy();
$im2->destroy();
$im->destroy();
?>
<img src="sample896a.png" /><br />

</body>
</html>


元画像(sf.jpg)


出力画像(sample896a.png)


関連項目
ImageMagickとPHPで凹んだ角丸四角形に画像を切り取る

No comments: