Wednesday, May 06, 2009

ImageMagickとPHPで画像をランダムな円の画像に変換する

ImageMagickとPHPで画像をランダムな円の画像に変換するには、以下のコードを実行します。


<!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>sample1114(ImageMagick6.5.2)</title>
</head>
<body>
<?php
/* 分割数 */
$divx = 10;
$divy = 10;
/* 分割された領域あたりの円の数 */
$noc = 30;
/* 円の最小半径サイズと最大半径サイズ */
$minr = 1;
$maxr = 5;

$im = new Imagick("sf.jpg");
$iw=$im->getImageWidth();
$ih=$im->getImageHeight();
$dx = ceil($iw/$divx);
$dy = ceil($ih/$divy);
$im2 = new Imagick();
$im2->newImage($iw, $ih, "none");
$idraw = new ImagickDraw();
for($ly=0;$ly<$ih;$ly+=$dy){
for($lx=0;$lx<$iw;$lx+=$dx){
for($rc=0;$rc<$noc;$rc++){
$px = $lx+rand(0,$dx);
$py = $ly+rand(0,$dy);
$pixel = $im->getImagePixelColor(
$px, $py);
$rad = rand($minr,$maxr);
$idraw->setFillColor($pixel);
$idraw->ellipse($px,$py,$rad,$rad,0,360);
}
}
}
$im2->drawImage($idraw);

$im2->writeImage('sample1114a.png');
$idraw->destroy();
$im2->destroy();
$im->destroy();
?>
<img src="sample1114a.png" /><br />

</body>
</html>


元画像(sf.jpg)


出力画像(sample1114a.png)
ImageMagickとPHPでランダムな円に変換した画像

No comments: