Saturday, January 31, 2009

ImageMagickとPHPで3色モノトーンの角丸四角画像に変換する

ImageMagickとPHPで3色モノトーンの角丸四角画像に変換するには、以下のコードを実行します。

<!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>sample743(ImageMagick6.4.4)</title>
</head>
<body>
<?php
/* 画像を三色モノトーンの角丸四角画像に変換する */
/* 右余白 */
$pright=5;
/* 角丸x */
$rx = 10;
/* 角丸y */
$ry = 10;
/* 左画像 */
$im = new Imagick("sf2.jpg");
$im->setImageColorspace(Imagick::COLORSPACE_GRAY);
//$im->colorizeImage("#c06030", 0.3);
$imb = $im->clone();
$imb->colorizeImage("#c06030", 1);
$imb->setImageOpacity(0.3);
$im->compositeImage($imb, Imagick::COMPOSITE_DEFAULT, 0, 0, Imagick::CHANNEL_ALL);
/* 左マスク作成 */
$im2 = new Imagick();
$im2->newImage($im->getImageWidth(), $im->getImageHeight(), "none");
$im2->setImageMatte(true);
$idraw = new ImagickDraw();
$idraw->setFillColor('white');
$idraw->roundrectangle(0, 0,
$im->getImageWidth()/3-$pright-1, $im->getImageHeight()-1, $rx, $ry);
$im2->drawImage($idraw);
$im2->compositeImage($im, Imagick::COMPOSITE_IN, 0, 0, Imagick::CHANNEL_ALL);
$imb->destroy();
$im->destroy();

/* 中央画像 */
$im = new Imagick("sf2.jpg");
$im->setImageColorspace(Imagick::COLORSPACE_GRAY);
//$im->colorizeImage("#50b030", 0.3);
$imb = $im->clone();
$imb->colorizeImage("#50b030", 1);
$imb->setImageOpacity(0.3);
$im->compositeImage($imb, Imagick::COMPOSITE_DEFAULT, 0, 0, Imagick::CHANNEL_ALL);
/* 中央マスク作成 */
$im3 = new Imagick();
$im3->newImage($im->getImageWidth(), $im->getImageHeight(), "none");
$im3->setImageMatte(true);
$idraw2 = new ImagickDraw();
$idraw2->setFillColor('white');
$idraw2->roundrectangle($im->getImageWidth()*1/3, 0,
$im->getImageWidth()*2/3-$pright-1, $im->getImageHeight()-1, $rx, $ry);
$im3->drawImage($idraw2);
$im3->compositeImage($im, Imagick::COMPOSITE_IN, 0, 0, Imagick::CHANNEL_ALL);
$imb->destroy();
$im->destroy();


/* 右画像 */
$im = new Imagick("sf2.jpg");
$im->setImageColorspace(Imagick::COLORSPACE_GRAY);
//$im->colorizeImage("#3040c0", 0.3);
$imb = $im->clone();
$imb->colorizeImage("#3040c0", 1);
$imb->setImageOpacity(0.3);
$im->compositeImage($imb, Imagick::COMPOSITE_DEFAULT, 0, 0, Imagick::CHANNEL_ALL);
/* 右マスク作成 */
$im4 = new Imagick();
$im4->newImage($im->getImageWidth(), $im->getImageHeight(), "none");
$im4->setImageMatte(true);
$idraw3 = new ImagickDraw();
$idraw3->setFillColor('white');
$idraw3->roundrectangle($im->getImageWidth()*2/3, 0,
$im->getImageWidth()-$pright-1, $im->getImageHeight()-1, $rx, $ry);
$im4->drawImage($idraw3);
$im4->compositeImage($im, Imagick::COMPOSITE_IN, 0, 0, Imagick::CHANNEL_ALL);

$im2->compositeImage($im3, Imagick::COMPOSITE_DEFAULT, 0, 0, Imagick::CHANNEL_ALL);
$im2->compositeImage($im4, Imagick::COMPOSITE_DEFAULT, 0, 0, Imagick::CHANNEL_ALL);

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

</body>
</html>

元画像(sf2.jpg)


出力画像()


関連項目
ImageMagickで画像を3色のモノトーンにした画像に変換する (convertコマンドで同様の処理)
ImageMagickとPHPで黄色だけを強調してにじませる

No comments: