我正在尝试编写一个小方法,它采用 BufferedImage
图像和新的宽度和高度,并通过根据图像向左/右或上/下添加透明边框来缩放图像以保持纵横比 . 缩放工作正常,但对于我的生活,我不能让边框透明 .
到目前为止,我有following code posted on 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;
知道我需要做什么Graphics2D才能使 Color.WHITE
背景透明并在新的上面绘制旧图像?谢谢你的帮助 .
Edit:
事实证明,我遇到的问题是我试图用JPEG图像生成透明色 . JPEG不支持透明度 . 咄 .
4 回答
我刚试了一下它就可以了 .
只需将
Color.WHITE
替换为new Color(0, 0, 0, 0)
,将img.getType()
替换为BufferedImage.TYPE_INT_ARGB
.image.png: (204x53)
newImage.png: (300x100)
我和你的帖子有相同的要求,how to make a color transparent上的这个页面给了我很多帮助 .
这是我的最终代码:
我实施了上述解决方案(或非常相似),如果你不使用,请注意
您的图像将以非常差的质量生成(由于缩放)
您的原始
drawImage()
方法没有透明背景,因为正在使用背景颜色 . 替换为以下内容: