這個可以做什麼運用呢?沒錯,可以拿來做浮水印。
方法很簡單,先開啟一張圖當基底,取得此基底的長寬建立一個BufferedImage,再拿這個BufferImage的畫筆Graphics,把基底圖畫上去,再來取得要放置在這張基底圖上的圖,依照設定坐標,畫在BufferedImage上,再來只要輸出就可以了。
首先先找二張圖,如果找不到的話可以下載下面二張圖
1.jpg 是高雄的旗津,這張當基底圖

2.jpg 這張是台南有名的矮仔成蝦仁飯,這張要印在1.jpg 上

這張就是印在坐標150,113上的結果,可以自己加上alpha 透明度。

程式碼如下:
package tool;
public class Image {
/**
*
* @param 背景圖
* ,基底
* @param 要印上去的圖
* @param 輸出位置
* @param 印上的圖x坐標
* @param 印上的圖y坐標
*/
public void composePic(String bgfilesrc, String logosrc, String outsrc,
int x, int y) {
try {
java.io.File bgfile = new java.io.File(bgfilesrc);
java.awt.Image bg_src = javax.imageio.ImageIO.read(bgfile);
java.io.File logofile = new java.io.File(logosrc);
java.awt.Image logo_src = javax.imageio.ImageIO.read(logofile);
int bg_width = bg_src.getWidth(null);
int bg_height = bg_src.getHeight(null);
int logo_width = logo_src.getWidth(null);
int logo_height = logo_src.getHeight(null);
java.awt.image.BufferedImage tag = new java.awt.image.BufferedImage(
bg_width, bg_height,
java.awt.image.BufferedImage.TYPE_INT_RGB);
java.awt.Graphics2D g2d = tag.createGraphics();
g2d.drawImage(bg_src, 0, 0, bg_width, bg_height, null);
g2d.setComposite(java.awt.AlphaComposite.getInstance(
java.awt.AlphaComposite.SRC_ATOP, 1.0f)); // 透明度設置開始,1.0是不透明,0是全透
g2d.drawImage(logo_src, x, y, logo_width, logo_height, null);
g2d.setComposite(java.awt.AlphaComposite
.getInstance(java.awt.AlphaComposite.SRC_OVER)); // 透明度設置結束
java.io.FileOutputStream out = new java.io.FileOutputStream(outsrc);
com.sun.image.codec.jpeg.JPEGImageEncoder encoder = com.sun.image.codec.jpeg.JPEGCodec
.createJPEGEncoder(out);
encoder.encode(tag);
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String args[]) {
Image image = new Image();
image.composePic("d:/1.jpg", "d:/2.jpg", "d:/out.jpg", 150, 113);
}
}
大大有幾個問題
首先非常感謝大大提供的程式
但依照大大的程式操作後產出的ok.jpg,無法開啟耶
大大有什麼解決之道嗎?
是out.jpg? 請問ok.jpg檔案有size嘛?
out.jpg
沒有size耶,0個位元組
那沒產生成功…你看看有沒有什麼錯誤訊息?
也沒有產生錯誤訊息耶><"
我剛才有copy程式碼
把檔案1.jpg 跟2.jpg放在d糟
可以在d糟產生out.jpg沒問題20k