直接上源碼,在一張圖片上加另外一張圖片
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();
}
}
調用java自帶的image合成圖片
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
jfreechart餅狀圖
mengtianbao
2020-02-23 11:32:43
java swing圖像放大、縮小、剪切
mengtianbao
2020-02-23 11:32:43
jfreechart柱狀圖
mengtianbao
2020-02-23 11:32:43
24小時熱門文章
-
再談23種設計模式(3):行爲型模式(學習筆記)
-
Power Automate Desktop 安裝完,登錄後老是提示one driver 錯誤
-
微前端學習筆記(4):從微前端到微模塊之EMP與hel-micro方案探索
-
微前端學習筆記(1):微前端總體架構概述,從微服務發微
-
985 碩士程序員,空窗 4 個月沒有 Offer!
-
一文搞懂 Spring 循環依賴
-
賽博鬥地主——使用大語言模型扮演Agent智能體玩牌類遊戲。
-
VScode右鍵打開(添加到右鍵)
-
記一次 .NET某工控視覺自動化系統 卡死分析
-
WindowsServer--SQL Server搭建主從同步實現讀寫分離 - 事務性分發