如何在圖上再放置另一張圖?

這個可以做什麼運用呢?沒錯,可以拿來做浮水印。

方法很簡單,先開啟一張圖當基底,取得此基底的長寬建立一個BufferedImage,再拿這個BufferImage的畫筆Graphics,把基底圖畫上去,再來取得要放置在這張基底圖上的圖,依照設定坐標,畫在BufferedImage上,再來只要輸出就可以了。

首先先找二張圖,如果找不到的話可以下載下面二張圖

1.jpg 是高雄的旗津,這張當基底圖

1.jpg

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

2.jpg

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

out.jpg

程式碼如下:

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); 
  } 
}

6 thoughts to “如何在圖上再放置另一張圖?”

  1. 大大有幾個問題

    首先非常感謝大大提供的程式

    但依照大大的程式操作後產出的ok.jpg,無法開啟耶

    大大有什麼解決之道嗎?

    1. 我剛才有copy程式碼
      把檔案1.jpg 跟2.jpg放在d糟
      可以在d糟產生out.jpg沒問題20k

發表迴響