這個可以做什麼運用呢?沒錯,可以拿來做浮水印。
方法很簡單,先開啟一張圖當基底,取得此基底的長寬建立一個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