Sunday, October 12, 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>sample653(ImageMagick6.4.2)</title>
</head>
<body>
<?php
/* 画像の端を半透明グラデーションにする */
$im = new Imagick("sf2.jpg");
$im->setImageMatte(true);

$it = $im->getPixelIterator();
foreach($it as $py => $line){
foreach($line as $px => $pixel){
$pixel->setColorValue(Imagick::COLOR_ALPHA,
((1.0-pow(2*$px/(float)$im->getImageWidth()-1.0, 4))*
(1.0-pow(2*$py/(float)$im->getImageHeight()-1.0, 4)))
);
}
$it->syncIterator();
}
$im->writeImage('sample653a.png');
/* 白背景と重ね合わせてjpegで保存 */
$im2 = new Imagick();
$im2->newImage($im->getImageWidth(), $im->getImageHeight(), "white");
$im2->compositeImage($im, Imagick::COMPOSITE_DEFAULT, 0, 0);
$im2->writeImage('sample653b.jpg');

$im2->destroy();
$im->destroy();
?>
<img src="sample653a.png" />
<img src="sample653b.jpg" />

</body>
</html>

元画像(sf2.jpg)


出力画像(sample653a.png):半透明PNG


出力画像(sample653b.jpg)


関連項目
ImageMagickとPHPで半透明の円形に切り取って他の画像と重ね合わせる
ImageMagickで画像に半透明グラデーションをかける

No comments: