近日在找工作,在看其中的一間面試的公司的網站的時候,看到了一些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 閱讀(281)
評論(0) 編輯 收藏 所屬分類:
個人學習日記 、
java api