Wednesday, May 28, 2008

JMagickで、画像を2値化してメッシュ状にした透過PNGを生成する

JMagickで、画像を2値化してメッシュ状にした透過PNGを生成するには、以下のコードを実行します。

import magick.*;

public class JMagickTest33
{
public static void main(String args[])
throws MagickException
{
MagickImage mi = new MagickImage(new ImageInfo("tree1.jpg"));
/* 画像を2値化 */
mi.thresholdImage(40000);

/* 画像のピクセルを取得 */
int iw = (int)mi.getDimension().getWidth();
int ih = (int)mi.getDimension().getHeight();
byte data[] = new byte[iw*ih*4];
mi.dispatchImage(0, 0, iw, ih, "RGBA", data);
int lx, ly;
for(ly=0;ly<ih;ly++){
for(lx=0;lx<iw;lx++){
if( lx%2 == 0 && ly%2 == 0 &&
data[ly*iw*4+lx*4] == 0 ){
/* 黒色部分でx,yが2で割り切れる場合 */
data[ly*iw*4+lx*4]=(byte)0x30;
data[ly*iw*4+lx*4+1]=(byte)0x70;
data[ly*iw*4+lx*4+2]=(byte)0xa0;
data[ly*iw*4+lx*4+3]=(byte)0xff;
} else {
data[ly*iw*4+lx*4]=0;
data[ly*iw*4+lx*4+1]=0;
data[ly*iw*4+lx*4+2]=0;
data[ly*iw*4+lx*4+3]=0;
}
}
}
mi.constituteImage(iw, ih, "RGBA", data);

mi.setFileName("sample461a.png");
mi.writeImage(new ImageInfo());

/* 重ね合わせ例 */
MagickImage mi2 = new MagickImage(new ImageInfo("sf2.jpg"));
mi2.compositeImage(CompositeOperator.SrcOverCompositeOp,mi,0,0);
mi2.setFileName("sample461b.png");
mi2.writeImage(new ImageInfo());

}
}


元画像(tree1.jpg)


出力画像(sample461a.png)


ほかの画像と重ね合わせ例(sample461b.png)


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


関連情報
JMagickまとめ
ImageMagickをJavaから使用するための設定(JMagickインストール)
ImageMagickで、画像を2値化してメッシュ状にした透過PNGを生成する (Convertコマンドで同様の処理を実行)

No comments: