Saturday, June 27, 2009

ImageMagickとPHPで画像をRGBチャネル画像に変換する

Imagickで画像をRGBチャネル画像に変換するには、以下のコードを実行します。


<!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>sample1129(ImageMagick6.5.2)</title>
</head>
<body>
<?php
/* 中央スペース */
$spx = 10;
$spy = 10;
/* スケール */
$sc = 0.75;

$im = new Imagick("sf.jpg");
$im->resizeImage($im->getImageWidth()*$sc,
$im->getImageHeight()*$sc,
imagick::FILTER_MITCHELL, 1);

$sx = $im->getImageWidth()*2+$spx;
$sy = $im->getImageHeight()*2+$spy;
$im2 = new Imagick();
$im2->newImage($sx, $sy, "black");

// All channel
$im2->compositeImage($im, Imagick::COMPOSITE_OVER,
0, 0, Imagick::CHANNEL_ALL);


// red channel
$imr = $im->fxImage("0", Imagick::CHANNEL_GREEN | Imagick::CHANNEL_BLUE);
$im2->compositeImage($imr, Imagick::COMPOSITE_COPY,
$im->getImageWidth()+$spx, 0, Imagick::CHANNEL_RED);

// green channel
$img = $im->fxImage("0", Imagick::CHANNEL_RED | Imagick::CHANNEL_BLUE);
$im2->compositeImage($img, Imagick::COMPOSITE_OVER,
0, $im->getImageHeight()+$spy, Imagick::CHANNEL_GREEN);

// blue channel
$imb = $im->fxImage("0", Imagick::CHANNEL_RED | Imagick::CHANNEL_GREEN);
$im2->compositeImage($imb, Imagick::COMPOSITE_OVER,
$im->getImageWidth()+$spx, $im->getImageHeight()+$spy,
Imagick::CHANNEL_BLUE);

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

</body>
</html>


元画像(sf.jpg)


出力画像(sample1129a.png)
ImagickでRGBチャネルにわけた画像

No comments: