Monday, August 25, 2008

Java2Dで画像の上に半透明のぼやけた文字列を描画する

Java2Dで画像の上に半透明のぼやけた文字列を描画するには、以下のコードを実行します。

import java.awt.*;
import java.awt.geom.*;
import java.awt.image.*;
import java.io.*;
import java.util.*;
import javax.imageio.*;

public class Java2DTest18
{
public static void main(String args[])
throws Exception
{
/* 画像の上に半透明のぼやけた文字列を描画する */

BufferedImage img = ImageIO.read(new File("sf.jpg"));
Graphics2D gr = img.createGraphics();

/* 文字列描画用のBufferedImageを作成 */
BufferedImage img2 = new BufferedImage(
img.getWidth(), img.getHeight(),
BufferedImage.TYPE_INT_ARGB_PRE
);
Graphics2D gr2 = img2.createGraphics();
/* 文字列を描画 */
gr2.setColor(new Color(0xff, 0xff, 0xff, 0xf0));
gr2.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 28));
gr2.drawString("San Francisco", 10, 150);
gr2.dispose();

/* 文字列をぼかす */
float kernel[] = new float[3*3];
for(int li=0;li<3*3;li++){
kernel[li] = 1f/(3*3);
}
BufferedImageOp bio = new ConvolveOp(new Kernel(3, 3, kernel),
ConvolveOp.EDGE_NO_OP, new RenderingHints(new HashMap()));
BufferedImage img3 = bio.filter(img2, null);

/* ぼかした文字列を半透明にして合成 */
gr.drawImage(img3, 0, 0, null);
gr.dispose();

ImageIO.write(img, "jpg", new File("sample542a.jpg"));
}
}

元画像(sf.jpg)


出力画像(sample542a.jpg)


環境
JDK6 Upadate6(JDK1.6.0_06)

関連項目
Java2Dで文字列をテクスチャ画像で塗りつぶす
Java2Dで文字列を描画する

No comments: