Friday, January 16, 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>sample738(ImageMagick6.4.4)</title>
</head>
<body>
<?php
/* ランダムな光のストライプを生成する */
/* 画像幅 */
$sx=300;
/* 画像高さ */
$sy=200;
/* 最小半径 */
$minr=15;
/* 最大半径 */
$maxr=40;
/* 横中央線からの最大幅 */
$maxh=40;
/* 円間の最大x距離 */
$maxw=50;
/* 円間の最小x距離 */
$minw=20;
/* 光の色 */
$light = "#bbddffe0";
/* 最小ストライプ幅 */
$minsw = 3;
/* 最大ストライプ幅 */
$maxsw = 30;
/* ストライプ最小リサイズ幅 */
$minrs = -30;
/* ストライプ最大リサイズ幅 */
$maxrs = 90;
/* モーションブラー */
$mb = 30;

$im = new Imagick();
$im->newImage($sx, $sy, 'none');


$idraw = new ImagickDraw();
$idraw->setFillColor($light);
/* ランダムな円を描画 */
for($lx=0;$lx<$sx;){
/* 半径 */
$rad = rand($minr, $maxr);
/* 円中心のy座標 */
$cy = $sy/2+rand($maxh, $maxh*-1);
$idraw->ellipse($lx, $cy, $rad, $rad, 0,360);
$lx += rand($minw,$maxw);
}
$im->drawImage($idraw);
/* ぼかし */
$im->blurImage(0, 5, Imagick::CHANNEL_ALL);
/* ストライプ上に切り取って拡大&スクロール */
$im2 = new Imagick();
$im2->newImage($sx, $sy, 'white');
$im2->setImageMatte(true);
for($lx=0;$lx<$sx;){
/* ストライプ幅 */
$sw = rand($minsw,$maxsw);
/* 拡大前の切り取り幅 */
$dh = rand($minrs, $maxrs);
$ims = $im->clone();
$ims->cropImage($sw, $sy-$dh, $lx, $dh/2);
$ims->resizeImage($sw, $sy, imagick::FILTER_MITCHELL, 1);
$im2->compositeImage($ims, Imagick::COMPOSITE_DEFAULT, $lx, 0,
Imagick::CHANNEL_ALL);
$ims->destroy();
$lx += $sw;
}
$idraw2 = new ImagickDraw();
$idraw2->setStrokeColor('#000000');
$idraw2->line(0,100,300,100);
$im2->drawImage($idraw2);

$im2->motionBlurImage(0,$mb,90);
$im2->motionBlurImage(0,$mb,270);


$im2->writeImage('sample738a.png');

$idraw->destroy();
$im2->destroy();
$im->destroy();
?>
<img src="sample738a.png" />

</body>
</html>


出力画像(sample738a.png)


関連項目
ImageMagickとPHPで青白く輝く文字列を描画する
ImageMagickとPHPで、文字列の影に横線を入れる

No comments: