合成图像:比如制作个性印章。首先需要准备2张图,1张白色的图片:bg.jpg,一张是印章的边框的图片template.gif,需要处理成透明。(制作这样风格的图片,可以使用photoshop的“置换”滤镜):
template.gif
程序处理部分是需要把输入的文字,和选择的template合成到bg.jpg里,在这里,我硬编码了输入文字到程序里,template使用已经准备好了的template.gif,当然,可以有更多的template提供给用户选择。bg.jpg是一张90×90的jpg全白色文件。这些我都暂时放在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();
}
}
}
执行后的效果是:
补充一下:
Java 2 平台可以区分两种字体:物理 字体和逻辑 字体。
物理 字体是实际的字体库,包含字形数据和表,这些数据和表使用字体技术(如 TrueType 或 PostScript Type 1)将字符序列映射到字形序列。Java 2 平台的所有实现都支持 TrueType 字体;对其他字体技术的支持是与实现相关的。物理字体可以使用字体名称,如 Helvetica、Palatino、HonMincho 或任意数量的其他字体名称。通常,每种物理字体只支持有限的书写系统集合,例如,只支持拉丁文字符或只支持日文和基本拉丁文。可用的物理字体集合随配置的不同而不同。要求特定字体的应用程序可以使用 createFont 方法来捆绑这些字体,并对其进行实例化。
构造方法摘要
Font(String name, int style, int size)
根据指定名称、样式和点大小,创建一个新 Font
public abstract void drawString(String s,
float x,
float y)
public abstract void drawImage(BufferedImage img,
BufferedImageOp op,
int x,
int y)