Friday, February 13, 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>sample784(ImageMagick6.4.4)</title>
</head>
<body>
<?php
/* 青色っぽい部分とそれ以外の部分を色付けする */
$im = new Imagick("sf.jpg");
$im->setImageMatte(true);
/* 青色っぽい部分に色つけ */
$im2 = $im->fxImage("(hue>0.47&&hue<0.69&&lightness>0.45)?1:0", Imagick::CHANNEL_ALPHA);
$im3 = $im2->fxImage("luminance", Imagick::CHANNEL_RED | Imagick::CHANNEL_GREEN | Imagick::CHANNEL_BLUE);
$im3->tintImage(new ImagickPixel("#aaccff"),new ImagickPixel("#f0f0f0"));
/* 青色っぽい部分以外に色つけ */
$im4 = $im->fxImage("luminance", Imagick::CHANNEL_RED | Imagick::CHANNEL_GREEN | Imagick::CHANNEL_BLUE);
$im4->tintImage(new ImagickPixel("#f8c749"),new ImagickPixel("#f0f0f0"));
/* 重ね合わせ */
$im4->compositeImage($im3, Imagick::COMPOSITE_DEFAULT, 0, 0);

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

</body>
</html>

元画像(sf.jpg)


出力画像(sample784a.png)
青色っぽい部分とそれ以外で別に着色した画像

関連項目
ImageMagickで、青色っぽい部分とそれ以外の部分を色付けする (convertコマンドでの同様の処理)
ImageMagickで青色っぽい部分だけ他の画像と半透明に重ねあわせる

No comments: