調用java自帶的image合成圖片

直接上源碼,在一張圖片上加另外一張圖片

import java.awt.AlphaComposite;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.PixelGrabber;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;

public class Main {
         
    public static void main(String[] args) {
        
        try {
            
            //讀取背景圖片
            BufferedInputStream backBIS = new BufferedInputStream(  new FileInputStream("back.jpg"));
            Image backImage = ImageIO.read(backBIS);


            //讀取頭像圖片
            BufferedInputStream headBIS = new BufferedInputStream(  new FileInputStream("head.png"));
            Image headImage = ImageIO.read(headBIS);
            
            if (backImage == null)
                System.out.println("haha null");               
             int alphaType = BufferedImage.TYPE_INT_RGB;  
                if (hasAlpha(backImage)) {  
                    alphaType = BufferedImage.TYPE_INT_ARGB;  
                }   
                
            //畫圖
            BufferedImage backgroundImage = new BufferedImage(backImage.getWidth(null), backImage.getHeight(null), alphaType);
            Graphics2D g = backgroundImage.createGraphics();
            g.drawImage(backImage, 0, 0, null);
            g.setComposite(AlphaComposite.getInstance(
                    AlphaComposite.SRC_ATOP, 1));
            g.drawImage(headImage, 133, 133, headImage.getWidth(null),headImage.getHeight(null), null);
            
            //輸出
            byte[] imageInByte = null;
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            ImageIO.write(backgroundImage, "png", baos);
            imageInByte = baos.toByteArray();
            baos.close();
            
            BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream("output.png"));
            output.write(imageInByte);
            output.close();
            
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        System.out.println("succ");
    }


    /**
     * 是否開啓alpha通道
     * @param image
     * @return
     */
   public static boolean hasAlpha(Image image) {  
      if (image instanceof BufferedImage) {  
         BufferedImage bimage = (BufferedImage)image;  
         return bimage.getColorModel().hasAlpha();  
      }          
         PixelGrabber pg = new PixelGrabber(image, 0, 0, 1, 1, false);  
     try {  
        pg.grabPixels();  
       } catch (InterruptedException e) {  
        }          
      ColorModel cm = pg.getColorModel();  
      return cm.hasAlpha();  
   } 
   
   
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章