需要注意两张图片同样大小,这里只负责叠加,相信大家可能遇到的问题就是使用 ImageIO.read() 方法读取png图像,然后在一张图片上面绘制另一张图片,但是结果会丢失原来图片的透明度。
所以我们做一次重写
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
public class ImageOverlying2 {
public static String overlapImage(String backgroundPath, String frontgroudPath,String outPutPath) {
try {
//设置图片大小
// BufferedImage background = ImageIO.read(new File(backgroundPath));
// BufferedImage frontgroud = ImageIO.read(new File(frontgroudPath));
BufferedImage background = resizeImagePng(256, 256, ImageIO.read(new File(backgroundPath)));
BufferedImage frontgroud = resizeImagePng(256, 256, ImageIO.read(new File(frontgroudPath)));
//在背景图片中添加入需要写入的信息,
Graphics2D g = background.createGraphics();
//设置为透明覆盖
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 1.0f));
//在背景图片上相框
g.drawImage(frontgroud, 0, 0, frontgroud.getWidth(), frontgroud.getHeight(), null);
g.dispose();
//输出图片
ImageIO.write(background, "png", new FileOutputStream(outPutPath));
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 重定义图片尺寸
* @param x
* @param y
* @param bfi
* @return
*/
public static BufferedImage resizeImagePng(int x, int y, BufferedImage bfi) {
BufferedImage bufferedImage = new BufferedImage(x, y, BufferedImage.TYPE_INT_ARGB);
bufferedImage.getGraphics().drawImage(
bfi.getScaledInstance(x, y, Image.SCALE_SMOOTH), 0, 0, null);
return bufferedImage;
}
public static void main(String[] args) {
String tiandi = "D:\\work\\data\\图1.png";
String haitu = "D:\\work\\data\\图2.png";
String desImage = "D:\\work\\data\\叠加图.png";
overlapImage(tiandi, haitu, desImage);
}
}