Friday, May 16, 2008

ImageMagickで画像を2値化して大き目の領域で切り取り

画像を2値化して大き目の領域で切り取るには、以下のバッチファイルを実行します。

rem 環境によって変えてね
set im=C:\Progra~1\ImageMagick-6.4.1-Q16
%im%\convert.exe tree1.jpg -threshold 50%% -blur 0x5 -threshold 95%% -fill #ffffe0 -opaque white -transparent black tree1.jpg +swap -composite sample420.png

上記のバッチファイルでは、以下の処理を実行しています。
1. 50%の閾値で2値化、ぼかしをかけて、再度95%の閾値で2値化することで、元々の2値化した画像より大き目の領域に変換します。
2. 白色部分を淡いクリーム色(#ffffe0)、黒色部分を透明(-transparent black)にします。
3. 元画像をもう一度読み込み、重ね合わせます。

元画像(tree1.jpg)


出力画像(sample420.png)


関連項目
ImageMagickで二値化して大きめに選択した領域をぼかして切り取り

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>sample389</title>
</head>
<body>
<?php
/* 上40ピクセルを切り落とし */
$im = new Imagick('sample4.jpg');
$im->chopImage(0,40,0,0);
$im->writeImage('sample389a.png');
/* $im->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im->destroy();
/* 右10ピクセル下20ピクセルを切り落とし */
$im = new Imagick('sample4.jpg');
$im->chopImage(10,20,$im->getImageWidth()-10, $im->getImageHeight()-20);
$im->writeImage('sample389b.png');
/* $im->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im->destroy();

?>

<img src="sample389a.png" />
<img src="sample389b.png" />

</body>
</html>

元画像(sample4.jpg)


出力画像(sample389a.png):上40ピクセル切り落とし


出力画像(sample389b.png):右10ピクセル下20ピクセルを切り落とし


環境
Apache 2.2.8/PHP5.2.5/ImageMagick6.4.0

関連項目
ImageMagickで画像の上下左右を切り落とす (Convertコマンド)

Thursday, May 15, 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>sample388</title>
</head>
<body>
<?php
/* 木炭画っぽく処理する(charcoal処理) */
$im = new Imagick('sf.jpg');
$im->charcoalImage(1,3);
$im->writeImage('sample388a.png');
/* $im->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im->destroy();

?>

<img src="sample388a.png" />

</body>
</html>

元画像(sf.jpg)


出力画像(sample388a.png)


環境
Apache 2.2.8/PHP5.2.5/ImageMagick6.4.0

関連項目
ImageMagickでcharcoal処理した画像にグラデーションをかける (Convertコマンド)
WindowsでImageMagickをPHPから使用するための設定 (Imagickの設定)

Wednesday, May 14, 2008

ImageMagickとPHPで、画像に枠をつける

Imagickで画像に枠をつけるには、以下のコードのようにborderImageメソッドを使用します。

<!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>sample387</title>
</head>
<body>
<?php
/* 画像に枠をつける */
$im = new Imagick('sf.jpg');
$im->borderImage('#bbddff',10,5);
$im->writeImage('sample387a.png');
/* $im->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im->destroy();

?>

<img src="sample387a.png" />

</body>
</html>

元画像(sf.jpg)


出力画像(sample387a.png)


関連項目
ImageMagickで枠をつける (Convertコマンド)

Tuesday, May 13, 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>sample386</title>
</head>
<body>
<?php
/* NOISE_UNIFORM */
$im = new Imagick('sf.jpg');
$im->addNoiseImage(Imagick::NOISE_UNIFORM);
$im->writeImage('sample386a.png');
/* $im->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im->destroy();
/* NOISE_GAUSSIAN */
$im = new Imagick('sf.jpg');
$im->addNoiseImage(Imagick::NOISE_GAUSSIAN);
$im->writeImage('sample386b.png');
/* $im->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im->destroy();
/* NOISE_MULTIPLICATIVEGAUSSIAN */
$im = new Imagick('sf.jpg');
$im->addNoiseImage(Imagick::NOISE_MULTIPLICATIVEGAUSSIAN);
$im->writeImage('sample386c.png');
/* $im->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im->destroy();
/* NOISE_IMPULSE */
$im = new Imagick('sf.jpg');
$im->addNoiseImage(Imagick::NOISE_IMPULSE);
$im->writeImage('sample386d.png');
/* $im->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im->destroy();
/* NOISE_LAPLACIAN */
$im = new Imagick('sf.jpg');
$im->addNoiseImage(Imagick::NOISE_LAPLACIAN);
$im->writeImage('sample386e.png');
/* $im->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im->destroy();
/* NOISE_POISSON */
$im = new Imagick('sf.jpg');
$im->addNoiseImage(Imagick::NOISE_POISSON);
$im->writeImage('sample386f.png');
/* $im->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im->destroy();
/* NOISE_POISSON & CHANNEL_BLUE */
$im = new Imagick('sf.jpg');
$im->addNoiseImage(Imagick::NOISE_POISSON, Imagick::CHANNEL_BLUE);
$im->writeImage('sample386g.png');
/* $im->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im->destroy();


?>


<img src="sample386a.png" />
<img src="sample386b.png" />
<img src="sample386c.png" />
<br />
<img src="sample386d.png" />
<img src="sample386e.png" />
<img src="sample386f.png" />
<br />
<img src="sample386g.png" />

</body>
</html>

元画像(sf.jpg)


NOISE_UNIFORMでの出力画像(sample386a.png)


NOISE_GAUSSIANでの出力画像(sample386b.png)


NOISE_MULTIPLICATIVEGAUSSIANでの出力画像(sample386c.png)


NOISE_IMPULSEでの出力画像(sample386d.png)


NOISE_LAPLACIANでの出力画像(sample386e.png)


NOISE_POISSONでの出力画像(sample386f.png)


NOISE_POISSONをblue channelだけに適用しての出力画像(sample386g.png)


環境
Apache 2.2.8/PHP5.2.5/ImageMagick6.4.0

関連項目
WindowsでImageMagickをPHPから使用するための設定 (Imagickの設定)

Monday, May 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>sample385</title>
</head>
<body>
<?php
/* 縦方向に画像の連結 */
$im = new Imagick('sf.jpg');
$im->waveImage(5,50);
$im->writeImage('sample385a.png');
/* $im->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im->destroy();
?>
<img src="sample385a.png" />
</body>
</html>

上記コードではwaveImageメソッドで画像を波型に揺らしています。

元画像(sf.jpg)


出力画像(sample385a.png)


環境
Apache 2.2.8/PHP5.2.5/ImageMagick6.4.0

関連項目
WindowsでImageMagickをPHPから使用するための設定 (Imagickの設定)

Sunday, May 11, 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>sample417(ImageMagick6.4.1)</title>
</head>
<body>
<?php
/* バンド状グラデーション */
$im = new Imagick();
/* グラデーション分割数のピクセルでグラデーションを作成 */
$im->newPseudoImage(1, 10, 'gradient:#FFFF10FF-#3070A0FF');
/* FILTER_POINTを使用してリサイズ */
$im->resizeImage(200, 200, Imagick::FILTER_POINT, 1, false);
$im->writeImage('sample417a.jpg');
/* $im->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im->destroy();
?>

<img src="sample417a.jpg" />

</body>
</html>

出力画像(sample417a.jpg)


環境
Apache 2.2.8/PHP5.2.5/ImageMagick6.4.1

関連項目
WindowsでImageMagickをPHPから使用するための設定 (Imagickの設定)
ImageMagickとPHPで、グラデーションの四角・角丸四角を描画する (Imagick)
ImageMagickでバンド状のグラデーションを作成する (Convertコマンド)

Saturday, May 10, 2008

ImageMagickとPHPで、2つの画像を連結する

Imagickを使用して2つの画像を連結するには、以下のコードを実行します。

<!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>sample384</title>
</head>
<body>
<?php
/* 縦方向に画像の連結 */
$im = new Imagick('sample3b.jpg');
$im2 = new Imagick('sample4.jpg');
$im->addImage($im2);
$im->setImageIndex(0);
$im3=$im->appendImages(true);
$im3->writeImage('sample384a.png');
/* $im3->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im3->destroy();
/* $im2->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im2->destroy();
/* $im->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im->destroy();
/* 横方向に画像の連結 */
$im = new Imagick('sample3b.jpg');
$im2 = new Imagick('sample4.jpg');
$im->addImage($im2);
$im->setImageIndex(0);
$im3=$im->appendImages(false);
$im3->writeImage('sample384b.png');
/* $im3->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im3->destroy();
/* $im2->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im2->destroy();
/* $im->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im->destroy();
?>
<img src="sample384a.png" />
<img src="sample384b.png" />
</body>
</html>

上記のコードでは、addImageメソッドでイメージを追加して、カレントのイメージインデックスを0に設定してからappendImagesメソッドで画像を連結しています。

元画像1(sample3b.jpg)


元画像2(sample4.jpg)


縦に連結した画像(sample384a.png)


横に連結した画像(sample384b.png)


環境
Apache 2.2.8/PHP5.2.5/ImageMagick6.4.0

関連項目
WindowsでImageMagickをPHPから使用するための設定 (Imagickの設定)

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>sample383</title>
</head>
<body>
<?php
/* リサイズ */
$im = new Imagick('sf.jpg');
/* 2008/11/25追記 比率を保ってリサイズするには、基準となる軸以外に0を指定する
(誤)$im->resizeImage(100, 100, imagick::FILTER_MITCHELL, 1);
*/
$im->resizeImage(100, 0, imagick::FILTER_MITCHELL, 1);
$im->writeImage('sample383a.png');
/* $im->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im->destroy();
/* アスペクト比を無視してリサイズ */
$im = new Imagick('sf.jpg');
$im->resizeImage(200, 100, imagick::FILTER_MITCHELL, 1, false);
$im->writeImage('sample383b.png');
/* $im->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im->destroy();
?>
<img src="sample383a.png" />
<img src="sample383b.png" />
</body>
</html>

元画像(sf.jpg)


出力画像1(sample383a.png)


出力画像2(sample383b.png)


関連項目
ImageMagickでアスペクト比を無視して大きさを変更する (Convertコマンド)
ImageMagickとPHPで、バンド状グラデーションを描画する (FILTER_POINTを使用してのリサイズ)
ImageMagickとPHPで、画像を荒いドット画像に変換する (FILTER_POINTを使用してのリサイズ)

Friday, May 09, 2008

ImageMagickとPHPで、画像の2値化を行う

Imagickで画像の2値化を行うには、以下のコードを実行します。

<!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>sample381</title>
</head>
<body>
<?php
/* 2値化 */
$im = new Imagick('sf.jpg');
$im->blackThresholdImage('#808080');
$im->whiteThresholdImage('#808080');
$im->writeImage('sample382a.png');
/* $im->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im->destroy();
?>
<img src="sample382a.png" />
</body>
</html>

上記の例ではblackThresholdImageメソッドとwhiteThresholdImageメソッドを使用して画像を2値化しています。

元画像(sf.jpg)


出力画像(sample382a.png)


環境
Apache 2.2.8/PHP5.2.5/ImageMagick6.4.0

関連項目
WindowsでImageMagickをPHPから使用するための設定 (Imagickの設定)

Thursday, May 08, 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>sample381</title>
</head>
<body>
<?php
/* グラデーション */
$im = new Imagick();
$im->newPseudoImage(200, 200, 'gradient:#bbddff-#ffffff');
$im->writeImage('sample381a.png');
/* $im->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im->destroy();

/* 角丸グラデーション */
$im = new Imagick();
$im->newPseudoImage(200, 200, 'gradient:#cceeff-#6699dd');
$im->roundCorners(20,20);
$im->writeImage('sample381b.png');
/* $im->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im->destroy();
?>

<img src="sample381a.png" />
<img src="sample381b.png" />
</body>
</html>

Imagick::newPseudoImageメソッドで、指定の2色のグラデーションのイメージを生成することができます。

出力画像(sample381a.png)


出力画像(sample381b.png)


環境
Apache 2.2.8/PHP5.2.5/ImageMagick6.4.0

関連項目
WindowsでImageMagickをPHPから使用するための設定 (Imagickの設定)
ImageMagickで角丸グラデーションの四角を描画する (Convertコマンド)

Wednesday, May 07, 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>sample380</title>
</head>
<body>
<?php
$im = new Imagick('sf.jpg');
$width = $im->getImageWidth();
/* 読み込んだイメージと同じ大きさのマスク用画像を作成 */
$height = $im->getImageHeight();
$mask = new Imagick();
$mask->newImage($width, $height, 'none', 'png');
/* 画像の大きさと同じ円を描画 */
$idraw = new ImagickDraw();
$idraw->setFillColor("#FFFFFF");
$idraw->ellipse($width/2, $height/2, $width/2-1, $height/2-1, 0, 360);
$mask->drawImage($idraw);
/* マスク画像を使用して画像を切り取り */
$mask->compositeImage($im, Imagick::COMPOSITE_IN, 0, 0, Imagick::CHANNEL_ALL);
$mask->writeImage('sample380a.png');

/* cleanup */
/* $idraw->clear(); 2008/09/30追記:destroyと同様にClearDrawingWandを呼ぶので必要なし */
$idraw->destroy();
/* $mask->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$mask->destroy();
/* $im->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im->destroy();
?>

<img src="sample380a.png" />
</body>
</html>

元画像(sf.jpg)


出力画像(sample380a.png)


環境
Apache 2.2.8/PHP5.2.5/ImageMagick6.4.0

Tuesday, May 06, 2008

ImageMagickで、文字列の影に横線をいれる

文字列の影に横線をいれるには、以下のバッチファイルを実行します。

rem 環境によって変えてね
set im=C:\Progra~1\ImageMagick-6.4.0-Q16
%im%\convert.exe -size 200x50 xc:none -gravity center -font Tahoma -pointsize 30 -fill #707070 -annotate 0 "ImageMagick" ( +clone -background #000000 -shadow 70x3+5+5 -fx "j%%2>0?p:#FFFFFF" ) +swap -background white -mosaic sample378.png

上記バッチファイルでは、以下の処理を実行しています。
1. 横200ピクセルx縦50ピクセルの透明なイメージを作成し、Tahomaフォント・30ポイント、描画色#707070で文字列ImageMagickを描画。
2. 処理1の画像を複製し、影の色#000000で影を生成し、偶数ラインを#FFFFFFの色にします。
3. 処理1と処理2の画像を入れ替え、背景色白で重ね合わせます。

出力画像(sample378.png)

Sunday, May 04, 2008

ImageMagickで、2つの画像が交互にスクロールするアニメーションGIFを作成する

2つの画像が交互にスクロールするアニメーションGIFを作成するには、以下のバッチファイルを実行します。

rem 環境によって変えてね
set im=C:\Progra~1\ImageMagick-6.4.0-Q16

%im%\convert.exe sample3b.jpg -enhance f0.png
%im%\convert.exe sample3b.jpg sample6.jpg -append -crop 100x100+0+10 +repage -enhance f1.png
%im%\convert.exe sample3b.jpg sample6.jpg -append -crop 100x100+0+20 +repage -enhance f2.png
%im%\convert.exe sample3b.jpg sample6.jpg -append -crop 100x100+0+30 +repage -enhance f3.png
%im%\convert.exe sample3b.jpg sample6.jpg -append -crop 100x100+0+40 +repage -enhance f4.png
%im%\convert.exe sample3b.jpg sample6.jpg -append -crop 100x100+0+50 +repage -enhance f5.png
%im%\convert.exe sample3b.jpg sample6.jpg -append -crop 100x100+0+60 +repage -enhance f6.png
%im%\convert.exe sample3b.jpg sample6.jpg -append -crop 100x100+0+70 +repage -enhance f7.png
%im%\convert.exe sample3b.jpg sample6.jpg -append -crop 100x100+0+80 +repage -enhance f8.png
%im%\convert.exe sample3b.jpg sample6.jpg -append -crop 100x100+0+90 +repage -enhance f9.png
%im%\convert.exe sample6.jpg -enhance f10.png
%im%\convert.exe sample6.jpg sample3b.jpg -append -crop 100x100+0+10 +repage -enhance f11.png
%im%\convert.exe sample6.jpg sample3b.jpg -append -crop 100x100+0+20 +repage -enhance f12.png
%im%\convert.exe sample6.jpg sample3b.jpg -append -crop 100x100+0+30 +repage -enhance f13.png
%im%\convert.exe sample6.jpg sample3b.jpg -append -crop 100x100+0+40 +repage -enhance f14.png
%im%\convert.exe sample6.jpg sample3b.jpg -append -crop 100x100+0+50 +repage -enhance f15.png
%im%\convert.exe sample6.jpg sample3b.jpg -append -crop 100x100+0+60 +repage -enhance f16.png
%im%\convert.exe sample6.jpg sample3b.jpg -append -crop 100x100+0+70 +repage -enhance f17.png
%im%\convert.exe sample6.jpg sample3b.jpg -append -crop 100x100+0+80 +repage -enhance f18.png
%im%\convert.exe sample6.jpg sample3b.jpg -append -crop 100x100+0+90 +repage -enhance f19.png

%im%\convert.exe f0.png -coalesce -layers optimize-plus f0.png f0.png f0.png f0.png f1.png f2.png f3.png f4.png f5.png f6.png f7.png f8.png f9.png f10.png f10.png f10.png f10.png f10.png f11.png f12.png f13.png f14.png f15.png f16.png f17.png f18.png f19.png -set delay 20 -loop 0 sample377.gif

上記の例では、2つの画像を垂直方向に連結して(-append)、ずらして切り取り(-chop)をおこなって各フレームを生成してアニメーションGIFを作成しています。また、各フレームでノイズを減らすために-enhanceを使用しています。

元画像1(sample3b.jpg)


元画像2(sample6.jpg)


出力画像(sample377.gif)

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>sample377</title>
</head>
<body>
<?php
/* 上下反転 */
$im = new Imagick('sample3b.jpg');
$im->flipImage();
$im->writeImage('sample377a.jpg');
/* $im->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im->destroy();
/* 左右反転 */
$im = new Imagick('sample3b.jpg');
$im->flopImage();
$im->writeImage('sample377b.jpg');
/* $im->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im->destroy();
?>

<img src="sample377a.jpg" />
<img src="sample377b.jpg" />
</body>
</html>

filpImageメソッドで上下反転、flopImageメソッドで左右反転を行います。

元画像(sample3b.jpg)


出力画像1(sample377a.jpg)


出力画像2(sample377b.jpg)


環境
Apache 2.2.8/PHP5.2.5/ImageMagick6.4.0

関連項目
ImageMagickで画像の左右反転を行う (Convertコマンド)
WindowsでImageMagickをPHPから使用するための設定 (Imagick)

Saturday, May 03, 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>sample376</title>
</head>
<body>
<?php
$im = new Imagick('sf.jpg');
$im->blurImage(0,5);
$im->writeImage('sample376a.jpg');
/* $im->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im->destroy();
?>

<img src="sample376a.jpg" />
</body>
</html>

元画像(sf.jpg)


出力画像(sample376a.jpg)


環境
Apache 2.2.8/PHP5.2.5/ImageMagick6.4.0

関連項目
WindowsでImageMagickをPHPから使用するための設定 (Imagickの設定)

Friday, May 02, 2008

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>sample374</title>
</head>
<body>
<?php
$im = new Imagick('sf2.jpg');
$im->setImageMatte(true);
$im->tintImage(new ImagickPixel("#bbddff"),new ImagickPixel("#f0f0f0"));
$im->writeImage('sample375a.jpg');
/* $im->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im->destroy();

?>

<img src="sample375a.jpg" />
</body>
</html>

上記の例では、tintImageメソッドを使用して水色っぽい色(#bbddff)に着色しています。

元画像(sf2.jpg)


出力画像(sample375a.jpg)


関連項目
ImageMagickで、画像を早朝っぽく加工する(Convertコマンド)
ImageMagickで、写真を黄色っぽく着色して端を暗くする (Convertコマンド)
WindowsでImageMagickをPHPから使用するための設定

Thursday, May 01, 2008

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>sample374</title>
</head>
<body>
<?php
/* 明度を70に設定 */
$im = new Imagick('sf.jpg');
$im->modulateImage(70,100,100);
$im->writeImage('sample374a.jpg');
/* $im->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im->destroy();

/* 彩度を150に設定 */
$im = new Imagick('sf.jpg');
$im->modulateImage(100,150,100);
$im->writeImage('sample374b.jpg');
/* $im->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im->destroy();

/* 色相を10に設定 */
$im = new Imagick('sf.jpg');
$im->modulateImage(100,100,10);
$im->writeImage('sample374c.jpg');
/* $im->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im->destroy();

?>

<img src="sample374a.jpg" />
<img src="sample374b.jpg" />
<img src="sample374c.jpg" />
</body>
</html>

元画像(sf.jpg)


出力画像1(sample374a.jpg)


出力画像2(sample374b.jpg)


出力画像3(sample374c.jpg)


環境
Apache 2.2.8/PHP5.2.5/ImageMagick6.4.0

関連項目
ImageMagickで明るさを変更する (Convertコマンド)
ImageMagickで彩度を変える  (Convertコマンド)
ImageMagickで色相を変える (Convertコマンド)

Wednesday, April 30, 2008

ImageMagickとPHPで、画像に日本語の文字列を描画する

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>sample373</title>
</head>
<body>
<?php
/* ファイルはUTF-8で保存してね */
$im = new Imagick('sf.jpg');
$idraw = new ImagickDraw();
/* フォント設定 */
$idraw->setFont("c:\\winnt\\fonts\\msgothic.ttc");
/* フォントサイズ設定 */
$idraw->setFontSize(32);
/* gravity設定 */
$idraw->setGravity(Imagick::GRAVITY_CENTER);
$im->annotateImage($idraw, 0, 0, 0, "日本語");
$im->writeImage('sample373a.jpg');
/* $idraw->clear(); 2008/09/30追記:destroyと同様にClearDrawingWandを呼ぶので必要なし */
$idraw->destroy();
/* $im->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im->destroy();
?>

<img src="sample373a.jpg" />
</body>
</html>

元画像(sf.jpg)


出力画像(sample373a.jpg)


環境
Apache 2.2.8/PHP5.2.5/ImageMagick6.4.0

関連項目
WindowsでImageMagickをPHPから使用するための設定
ImageMagickとPHPで、画像からはみ出した影付き文字列を描画する