近日在找工作,在看其中的一间面试的公司的网站的时候,看到了一些JAVA图片处理的一些功能,这家公司主要是做图像方面的。比如照片合成,个性印章的制作。为了作一些准备,有必要自己动手试了一下实现这些功能。大概原理和在图片上加水印文字一样。

合成图像:比如制作个性印章。首先需要准备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)


posted on 2008-06-05 18:17 lzj520 阅读(275) 评论(0)  编辑  收藏 所属分类: 个人学习日记java api

只有注册用户登录后才能发表评论。


网站导航: