如何使用透明填充缩放 Graphics2D 图像

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 不支持透明度。呃。

Eng*_*uad 6

我刚刚试过它,它的工作原理。

只需更换Color.WHITEnew 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)

在此处输入图片说明