Saturday, May 17, 2008

JMagickで、画像に枠をつける

JMagickで画像に枠をつけるには以下のコードを実行します。

import java.awt.*;
import magick.*;

public class JMagickTest7
{
public static void main(String args[])
throws MagickException
{
/* 画像に枠をつける */
MagickImage mi = new MagickImage(new ImageInfo("sf.jpg"));
/* 枠のサイズ */
Rectangle rec = new Rectangle(20, 10);
/* 枠の色 */
mi.setBorderColor(new PixelPacket(0xbb*256, 0xdd*256, 0xff*256, 0));
MagickImage mo = mi.borderImage(rec);
mo.setFileName("sample428a.jpg");
mo.writeImage(new ImageInfo());
}
}

元画像(sf.jpg)


出力画像(sample428a.jpg)


環境
JDK6 Upadate6(JDK1.6.0_06)/jmagick-win-6.3.9-Q16


関連情報
JMagickまとめ
ImageMagickをJavaから使用するための設定(JMagickインストール)

JMagickで画像の上に文字列を描画する

JMagickで画像の上に文字列を描画するには、以下のコードを実行します。

import magick.*;

public class JMagickTest6
{
public static void main(String args[])
throws MagickException
{
/* 画像に文字列を描画する */
ImageInfo ii = new ImageInfo("sf.jpg");
DrawInfo di = new DrawInfo(ii);
/* フォント指定 */
di.setFont("c:\\winnt\\fonts\\msgothic.ttc");
/* ポイントサイズ指定 */
di.setPointsize(30);
/* 塗りつぶし色指定 */
di.setFill(new PixelPacket(0xbb*256, 0xdd*256, 0xff*256, 0));
/* Gravity設定 */
di.setGravity(GravityType.NorthWestGravity);
/* 位置指定 */
di.setGeometry("+20+20");
/* テキスト設定 */
di.setText("日本語");
MagickImage mi = new MagickImage(ii);
mi.annotateImage(di);
mi.setFileName("sample427a.jpg");
mi.writeImage(new ImageInfo());
}
}

元画像(sf.jpg)


出力画像(sample427a.jpg)


環境
JDK6 Upadate6(JDK1.6.0_06)/jmagick-win-6.3.9-Q16


関連情報
JMagickまとめ
ImageMagickをJavaから使用するための設定(JMagickインストール)

JMagickで、画像を重ね合わせる

JMagickで画像を重ね合わせるには以下のコードを実行します。

import magick.*;

public class JMagickTest5
{
public static void main(String args[])
throws MagickException
{
/* 画像を重ね合わせる */
MagickImage mi1 = new MagickImage(new ImageInfo("sf.jpg"));
MagickImage mi2 = new MagickImage(new ImageInfo("sample6.jpg"));
mi1.compositeImage(CompositeOperator.SrcOverCompositeOp,mi2,20,20);
mi1.setFileName("sample426a.jpg");
mi1.writeImage(new ImageInfo());
}
}

元画像1(sf.jpg)


元画像2(sample6.jpg)


出力画像(sample426a.jpg)


環境
JDK6 Upadate6(JDK1.6.0_06)/jmagick-win-6.3.9-Q16


関連情報
JMagickまとめ
ImageMagickをJavaから使用するための設定(JMagickインストール)
JMagickで画像を半透明にして重ね合わせる

JMgickで角丸四角を描画する

JMgickで角丸四角を描画するには、以下のコードを実行します。

import magick.*;

public class JMagickTest4
{
public static void main(String args[])
throws MagickException
{
/* 角丸四角を描画する */
ImageInfo ii = new ImageInfo("xc:white");
ii.setSize("200x200");
DrawInfo di = new DrawInfo(ii);
/*di.setFill(PixelPacket.queryColorDatabase("blue"));*/
di.setFill(new PixelPacket(0xbb*256, 0xdd*256, 0xff*256, 0));
di.setPrimitive("roundrectangle 0, 0, 199, 199, 20, 20");
MagickImage mi = new MagickImage(ii);
mi.drawImage(di);
mi.setFileName("sample425a.jpg");
mi.writeImage(new ImageInfo());
}
}

出力画像(sample425a.jpg)


環境
JDK6 Upadate6(JDK1.6.0_06)/jmagick-win-6.3.9-Q16


関連情報
JMagickまとめ
ImageMagickをJavaから使用するための設定(JMagickインストール)

Jmagickで、グラデーション画像を生成する

JMagickでグラデーション画像を生成するには、以下のコードを実行します。

import magick.*;

public class JMagickTest3
{
public static void main(String args[])
throws MagickException
{
/* グラデーション画像を作成 */
ImageInfo ii = new ImageInfo("gradient:#bbddff-#ffffff");
ii.setSize("100x100");
MagickImage mi = new MagickImage(ii);
mi.setFileName("sample424a.jpg");
mi.writeImage(new ImageInfo());
}
}

出力画像(sample423a.jpg)



環境
JDK6 Upadate6(JDK1.6.0_06)/jmagick-win-6.3.9-Q16


関連情報
JMagickまとめ
ImageMagickをJavaから使用するための設定(JMagickインストール)

JMagickで、明度・彩度・色相を変更する

JMagickで、明度・彩度・色相を変更するには、以下のコードを実行します。


import magick.*;

public class JMagickTest2
{
public static void main(String args[])
throws MagickException
{
/* 明度を70に設定 */
MagickImage mi = new MagickImage(new ImageInfo("SF.jpg"));
mi.modulateImage("70,100,100");
mi.setFileName("sample423a.jpg");
mi.writeImage(new ImageInfo());

/* 彩度を150に設定 */
MagickImage mi2 = new MagickImage(new ImageInfo("SF.jpg"));
mi2.modulateImage("100,150,100");
mi2.setFileName("sample423b.jpg");
mi2.writeImage(new ImageInfo());

/* 色相を10に設定 */
MagickImage mi3 = new MagickImage(new ImageInfo("SF.jpg"));
mi3.modulateImage("100,100,10");
mi3.setFileName("sample423c.jpg");
mi3.writeImage(new ImageInfo());
}
}


元画像(sf.jpg)


出力画像(sample423a.jpg)


出力画像(sample423b.jpg)


出力画像(sample423c.jpg)


環境
JDK6 Upadate6(JDK1.6.0_06)/jmagick-win-6.3.9-Q16


関連情報
JMagickまとめ
ImageMagickをJavaから使用するための設定(JMagickインストール)

ImageMagickをJavaから使用するための設定(JMagickインストール)

ImageMagickをJavaから使用するためには、JMagickを以下のようにインストールします。

1.以下のURLからImageMagick-6.3.9-0-Q16-windows-dll.exeとjmagick-win-6.3.9-Q16.zipをダウンロード。
http://www.jmagick.org/download.html

2.ダウンロードしたImageMagick-6.3.9-0-Q16-windows-dll.exeをインストール。

3.ダウンロードしたjmagick-win-6.3.9-Q16.zipを解凍してjmagick.dllとjmagick.jarを[JAVA_HOME]\jre\lib\extにコピー

以下のコードをコンパイル・実行することで画像をぼかすことができます。

import magick.*;

public class JmagickTest1
{
public static void main(String args[])
throws MagickException
{
MagickImage mi = new MagickImage(new ImageInfo("SF.jpg"));
MagickImage mo = mi.blurImage(0, 5);
mo.setFileName("sample422.jpg");
mo.writeImage(new ImageInfo());
}
}

元画像(sf.jpg)


出力画像(sample422.jpg)


環境
JDK6 Upadate6(JDK1.6.0_06)/jmagick-win-6.3.9-Q16
関連情報
JMagickまとめ

ImageMagickで、透過PNGの切り抜き画像からシールっぽい画像を生成する

透過PNGの切り抜き画像からシールっぽい画像を生成するには、以下のバッチファイルを実行します。

rem 環境によって変えてね
set im=C:\Progra~1\ImageMagick-6.4.1-Q16
%im%\convert.exe -size 120x120 xc:black sample2.png -gravity center -composite -threshold 20%% -blur 0x10 sample421a.png
%im%\convert.exe sample421a.png -threshold 18%% -transparent black -fill #a0a0a0 -opaque white ( sample421a.png -threshold 21%% -fill #ffffe0 -opaque white -transparent black ) -composite sample2.png -gravity center -composite sample421b.png
%im%\convert.exe -size 120x120 xc:#f1ede1 sample421b.png ( +clone -background #000000 -shadow 70x2+3+3 ) -swap 1,2 -mosaic sample421c.png

上記のバッチファイルでは、以下の処理を実行しています。
1. 元画像の透過PNGにちょっと大き目の黒背景を重ね合わせて2値化し(-threshold 20%%)、ぼかし(-blur 0x10)をかけます。

元画像(sample2.png:100x100ピクセル)


出力画像(sample421a.png)


2.処理1の出力画像(sample421a.png)を閾値18%で二値化し、白色部分は#a0a0a0に塗り替え、黒色部分は透明にします。これで、縁取りの部分の領域を作成します。次に、処理1の出力画像を今度は閾値21%で二値化し、白色部分を#ffffe0に、黒色部分は透明にします。元画像を読み込んで、画像を重ね合わせると、以下の画像になります。

出力画像(sample421b.png)


3.最後に、背景画像(#f1ede1)と、影、処理2の出力画像(sample421b.png)を重ね合わせると、以下の画像になります。

出力画像(sample421c.png)


関連項目
ImageMagickで、透過PNG画像に半透明の縁取りをつける

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コマンド)