Gra*_*ray 4 java transparency image alpha-transparency graphics2d
我正在尝试编写一个小方法,该方法获取BufferedImage图像和新的宽度和高度,并通过根据图像向左/右或顶部/底部添加透明边框来缩放图像以保持纵横比。缩放效果很好,但对于我的生活,我无法让边框变得透明。
到目前为止,我在 pastebin.com上发布了以下代码,它可以很好地进行缩放。
我已经阅读了很多手册和其他 SO 问题,但无济于事。我尝试了大量的填充、复合类型、图像类型等排列。有时我会得到蓝色背景,有时是白色,但它似乎永远不会是透明的。
BufferedImage newImg = new BufferedImage(newWidth, newHeight, img.getType());
Graphics2D g = newImg.createGraphics();
g.setColor(Color.WHITE);
g.fillRect(0, 0, newWidth, newHeight);
g.drawImage(img, x, y, x + scaledWidth, y + scaledHeight, 0, 0,
currentWidth, currentHeight, Color.WHITE, null);
g.dispose();
return newImg;
Run Code Online (Sandbox Code Playgroud)
知道我需要调用什么 Graphics2D 来使Color.WHITE背景透明并在新图像上绘制旧图像吗?谢谢你的帮助。
编辑:
事实证明,我遇到的问题是我试图用 JPEG 图像生成透明颜色。JPEG 不支持透明度。呃。
我刚刚试过它,它的工作原理。
只需更换Color.WHITE用new Color(0, 0, 0, 0),并img.getType()用BufferedImage.TYPE_INT_ARGB。
BufferedImage img = ImageIO.read(new File("image.png"));
BufferedImage outImage = scaleWithPadding(img, 300, 100);
ImageIO.write(outImage, "png", new File("newImage.png"));
Run Code Online (Sandbox Code Playgroud)
image.png: (204x53)

newImage.png: (300x100)
