Wednesday, June 04, 2008

JMagickで画像の端を暗くする

JMagickで画像の端を暗くするには、以下のコードを実行します。

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

public class JMagickTest35
{
public static void main(String args[])
throws MagickException
{
/* 元画像のサイズ取得 */
MagickImage mi = new MagickImage(new ImageInfo("sf.jpg"));
int iw = (int)mi.getDimension().getWidth();
int ih = (int)mi.getDimension().getHeight();
int d = 10;

ImageInfo ii = new ImageInfo("xc:black");
ii.setSize(iw + "x" + ih);
MagickImage mi1 = new MagickImage(ii);
/* 枠描画 */
mi1.setBorderColor(PixelPacket.queryColorDatabase("white"));
MagickImage mi2 = mi1.borderImage(new Rectangle(d, d));

/* ぼかして中央を透明に */
int tw = iw+d*2;
int th = ih+d*2;
MagickImage mi3 = mi2.blurImage(0, 10);
byte data[] = new byte[tw*th*4];
mi3.dispatchImage(0, 0, tw, th, "RGBA", data);
int ind = 0;
for(ind=0;ind<tw*th*4;ind+=4){
data[ind+3] = data[ind+0];
data[ind] = (byte)0;
data[ind+1] = (byte)0;
data[ind+2] = (byte)0;
}
mi3.constituteImage(tw, th, "RGBA", data);

/* 中央部分を切り取り */
Rectangle rec = new Rectangle(d, d, iw+d-1, ih+d-1);
MagickImage mi4 = mi3.cropImage(rec);

/* 画像と重ね合わせ */
mi.compositeImage(CompositeOperator.SrcOverCompositeOp,mi4,0,0);

mi.setFileName("sample466a.jpg");
mi.writeImage(new ImageInfo());
}
}

元画像(sf.jpg)


出力画像(sample466a.jpg)


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


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

No comments: