解决Java处理png图片时透明背景变黑的问题
// Copy image to buffered image
Graphics2D g = bimage.createGraphics();
// 下面两行解决png透明图片会变黑的问题
bimage = g.getDeviceConfiguration().createCompatibleImage(image.getWidth(null), image.getHeight(null), Transparency.TRANSLUCENT);
g = bimage.createGraphics();
// Paint the image onto the buffered image
g.drawImage(image, 0, 0, null);
解决Java处理png图片时透明背景变黑的问题 // Copy image to buffered image Graphics2D g = bimage.createGraphics(); // 下面两行解决png透明图片会变黑的问题 bimage = g.getDeviceConfiguration().createCompatibleImage(image.getWidth...
如果你保存成本地文件,背景真的变黑了,注意是真的!因为,有很多看图软件的背景是黑色的,当png透明时,当然也是黑色的,但是,换到ps里,或者其他看图软件中,就看出透明了。
如果真的变黑,原因九成是Bitmap对象在处理的过程中,有一个地方的颜色配置不对,以下生成Bitmap的方法:
Bitmap.createBitmap(drawable.getIntrinsicWidth(), draw
在用canvas的toDataURL处理png时,发现透明区域被填充成黑色。
为什么canvas会png的透明区域转成黑色呢?
canvas转换之前移除alpha通道,所以透明区域被填充成了黑色。
但是,我们希望的是,canvas可以将png的透明区域填充成白色。
那么怎么将canvas中的透明区域填充成白色呢?
我们有两个方案:
解决方案一:将透明的pixel设成白色
因为png图片的背景都是透明的,所以我们
// 创建BufferedImage对象
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
// 获取Graphics2D
public class TransparentImage {
public static void main(String[] args) throws Exception {
// 读取原始图片
BufferedImage originalImage = ImageIO.read(new File("original.png"));
// 创建一个新的BufferedImage,宽度和高度与原始图片相同,类型为ARGB
BufferedImage newImage = new BufferedImage(originalImage.getWidth(), originalImage.getHeight(), BufferedImage.TYPE_INT_ARGB);
// 获取Graphics2D对象
Graphics2D graphics = newImage.createGraphics();
// 将原始图片绘制到新的BufferedImage中
graphics.drawImage(originalImage, 0, 0, null);
// 将指定颜色的像素设置为透明
int transparentColor = Color.WHITE.getRGB();
for (int x = 0; x < newImage.getWidth(); x++) {
for (int y = 0; y < newImage.getHeight(); y++) {
if (newImage.getRGB(x, y) == transparentColor) {
newImage.setRGB(x, y, 0x00000000);
// 保存新的图片
ImageIO.write(newImage, "png", new File("transparent.png"));
这段代码可以将名为"original.png"的图片中所有白色像素设置为透明,并保存为"transparent.png"。
Error occurred during initialization of VM Could not reserve enough space for object heap
145283