合成圖像:比如制作個(gè)性印章。首先需要準(zhǔn)備2張圖,1張白色的圖片:bg.jpg,一張是印章的邊框的圖片template.gif,需要處理成透明。(制作這樣風(fēng)格的圖片,可以使用photoshop的“置換”濾鏡):

template.gif
程序處理部分是需要把輸入的文字,和選擇的template合成到bg.jpg里,在這里,我硬編碼了輸入文字到程序里,template使用已經(jīng)準(zhǔn)備好了的template.gif,當(dāng)然,可以有更多的template提供給用戶選擇。bg.jpg是一張90×90的jpg全白色文件。這些我都暫時(shí)放在C盤根目錄下。程序處理如下:
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import javax.imageio.ImageIO;
import com.sun.image.codec.jpeg.*;
public class TestDrawFont {
public static void main(String[] args) {
try {
BufferedImage image = ImageIO.read(new FileInputStream("c:\\bg.jpg"));
Graphics2D g = image.createGraphics();
BufferedImage image_template = ImageIO.read(new FileInputStream("c:\\template.gif"));
g.setColor(Color.red);
g.setFont(new Font("漢鼎簡中黑",Font.ITALIC + Font.BOLD + Font.LAYOUT_LEFT_TO_RIGHT, 23));//寫入簽名
g.drawString("帥哥",22, image.getHeight() - 50);
g.drawString("印章",22, image.getHeight()-30);
g.drawImage(image_template, 5,image.getHeight() - 85, image_template.getWidth(null),image_template.getHeight(null), null);
g.dispose();
FileOutputStream out = new FileOutputStream("c:\\all.jpg");
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(image);
out.close();
} catch(Exception e) {
e.printStackTrace();
}
}
}
執(zhí)行后的效果是:

補(bǔ)充一下:
Java 2 平臺可以區(qū)分兩種字體:物理 字體和邏輯 字體。
物理 字體是實(shí)際的字體庫,包含字形數(shù)據(jù)和表,這些數(shù)據(jù)和表使用字體技術(shù)(如 TrueType 或 PostScript Type 1)將字符序列映射到字形序列。Java 2 平臺的所有實(shí)現(xiàn)都支持 TrueType 字體;對其他字體技術(shù)的支持是與實(shí)現(xiàn)相關(guān)的。物理字體可以使用字體名稱,如 Helvetica、Palatino、HonMincho 或任意數(shù)量的其他字體名稱。通常,每種物理字體只支持有限的書寫系統(tǒng)集合,例如,只支持拉丁文字符或只支持日文和基本拉丁文??捎玫奈锢碜煮w集合隨配置的不同而不同。要求特定字體的應(yīng)用程序可以使用 createFont 方法來捆綁這些字體,并對其進(jìn)行實(shí)例化。
構(gòu)造方法摘要
Font(String name, int style, int size)
根據(jù)指定名稱、樣式和點(diǎn)大小,創(chuàng)建一個(gè)新 Font
public abstract void drawString(String s,
float x,
float y)
public abstract void drawImage(BufferedImage img,
BufferedImageOp op,
int x,
int y)