java png透明_Java合并PNG图像(保持背景透明)

这段Java代码展示了如何将多个PNG图像合并在一起,并确保合并后的图像保持原有的背景透明效果。通过使用Graphics2D和Transparency.TRANSLUCENT属性,程序能够创建一个兼容的新图像,有效地合并输入的PNG文件。
摘要由CSDN通过智能技术生成

import java.awt.Graphics2D;

import java.awt.Transparency;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;

import java.util.List;

import javax.imageio.ImageIO;

public class PngFileWriter {

public void append(List inputFileNameList, String outputFileName, boolean isX) {

if (inputFileNameList == null || inputFileNameList.size() == 0) {

return;

}

try {

boolean isFirstPng = true;

BufferedImage outputImg = null;

int outputImgW = 0;

int outputImgH = 0;

for (String pngFileName : inputFileNameList) {

if (isFirstPng) {

isFirstPng = false;

outputImg = ImageIO.read(new File(pngFileName));

outputImgW = outputImg.getWidth();

outputImgH = outputImg.getHeight();

} else {

BufferedImage appendImg = ImageIO.read(new File(pngFileName));

int appendImgW = appendImg.getWidth();

int appendImgH = appendImg.getHeight();

if (isX) {

outputImgW = outputImgW + appendImgW;

outputImgH = outputImgH > appendImgH ? outputImgH : appendImgH;

} else {

outputImgW = outputImgW > appendImgW ? outputImgW : appendImgW;

outputImgH = outputImgH + appendImgH;

}

// create basic image

Graphics2D g2d = outputImg.createGraphics();

BufferedImage imageNew = g2d.getDeviceConfiguration().createCompatibleImage(outputImgW, outputImgH,

Transparency.TRANSLUCENT);

g2d.dispose();

g2d = imageNew.createGraphics();

int oldImgW = outputImg.getWidth();

int oldImgH = outputImg.getHeight();

g2d.drawImage(outputImg, 0, 0, oldImgW, oldImgH, null);

if (isX) {

g2d.drawImage(appendImg, oldImgW, 0, appendImgW, appendImgH, null);

} else {

g2d.drawImage(appendImg, 0, oldImgH, appendImgW, appendImgH, null);

}

g2d.dispose();

outputImg = imageNew;

}

}

writeImageLocal(outputFileName, outputImg);

} catch (Exception e) {

e.printStackTrace();

}

}

private void writeImageLocal(String fileName, BufferedImage image) {

if (fileName != null && image != null) {

try {

File file = new File(fileName);

ImageIO.write(image, "png", file);

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值