Thursday, September 18, 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>sample564(ImageMagick6.4.2)</title>
</head>
<body>
<?php
/* 画像の任意の領域をぼかして半透明の色を重ね合わせる */

$im = new Imagick("sf2.jpg");
$im->blurImage(10, 10, Imagick::CHANNEL_ALL);
$idraw = new ImagickDraw();
$idraw->setFillColor('#ffffff60');
$idraw->rectangle(0, 0,
$im->getImageWidth(), $im->getImageHeight());
$im->drawImage($idraw);

/* マスク作成 */
$im2 = new Imagick();
$im2->newImage($im->getImageWidth(), $im->getImageHeight(), "none");
$idraw2 = new ImagickDraw();
$idraw2->setFillColor('white');
$idraw2->rectangle(10, 10, 140, 215);
$im2->drawImage($idraw2);
/* マスクを使用して切り取り */
$im2->compositeImage($im, Imagick::COMPOSITE_IN, 0, 0, Imagick::CHANNEL_ALL);

/* 元画像と重ね合わせ */
$im3 = new Imagick("sf2.jpg");
$im3->compositeImage($im2, Imagick::COMPOSITE_DEFAULT, 0, 0, Imagick::CHANNEL_ALL);

$im3->writeImage('sample564a.jpg');

/* $idraw->clear(); 2008/09/30追記:destroyと同様にClearDrawingWandを呼ぶので必要なし */
$idraw->destroy();
/* $idraw2->clear(); 2008/09/30追記:destroyと同様にClearDrawingWandを呼ぶので必要なし */
$idraw2->destroy();
/* $im3->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im3->destroy();
/* $im2->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im2->destroy();
/* $im->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im->destroy();
?>
<img src="sample564a.jpg" />

</body>
</html>

元画像(sf2.jpg)


出力画像(sample564a.jpg)


関連項目
ImageMagickで半透明矩形を描画して、その背景部分だけぼかす (Convertコマンドによる同様の処理)

No comments: