Sunday, March 15, 2009

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>sample908(ImageMagick6.4.8)</title>
</head>
<body>
<?php
/* 画像をタイル配置した角丸四角で切り取る */
/* 角丸四角サイズ */
$rw = 30;
$rh = 20;
/* 余白 */
$padx = 1;
$pady = 1;
/* 角丸サイズ */
$rx = 5;
$ry = 5;

/* 角丸四角イメージ作成 */
$idraw = new ImagickDraw();
$idraw->pushPattern('tile', 0, 0, $rw, $rh);
$idraw->roundrectangle($padx,$pady,
$rw-$padx-1, $rh-$pady-1, $rx, $ry);
$idraw->popPattern();

$im = new Imagick("sf.jpg");
/* タイルパターンにして配置 */
$idraw->setFillPatternURL('#tile');
$im2 = new Imagick();
$im2->newPseudoImage($im->getImageWidth(),
$im->getImageHeight(), "xc:none");
$idraw->rectangle(0, 0, $im->getImageWidth(),
$im->getImageHeight());
$im2->drawImage($idraw);

$im2->compositeImage($im,
Imagick::COMPOSITE_IN, 0, 0, Imagick::CHANNEL_ALL);
$im2->writeImage('sample908a.png');
$im2->destroy();
$im->destroy();
?>
<img src="sample908a.png" /><br />

</body>
</html>


元画像(sf.jpg)


出力画像(sample908a.png)


関連項目
ImageMagickで画像を角丸四角タイルパターンで切り取る (convertコマンドでの同様の処理)
ImageMagickとPHPで画像をタイル配置する

No comments: