提问人:davidalayachew 提问时间:9/21/2023 最后编辑:davidalayachew 更新时间:9/21/2023 访问量:36
如何在 gif 中为 BufferedImage 创建透明像素,然后保存到 GIF 文件?
How to create transparent pixels in a gif for BufferedImage, then save to a GIF file?
问:
我有代码可以创建一个简单的 java.awt.Color
的 5x5 数组,然后使用它来创建 java.awt.image.BufferedImage
。数组的边缘是一种不透明的颜色(),称为 ,而中心是一种透明的颜色(),称为 。alpha = 255
o
alpha = 0
t
最后,我使用 javax.imageio.ImageIO.write()
将图像写出到文件中。
这是代码。
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
class Irrelevant
{
public static void main(String[] args) throws Exception
{
final Color o = new Color(255, 0, 0, 255); //opaque red
final Color t = new Color(0, 255, 0, 0); //transparent green -- clear
final Color[][] pixels = //red edges with (ideally) a clear center
{
{o, t, t, t, o},
{o, t, t, t, o},
{o, t, t, t, o},
{o, t, t, t, o},
{o, t, t, t, o}
};
BufferedImage image = new BufferedImage(pixels.length, pixels[0].length, BufferedImage.TYPE_INT_ARGB);
for (int y = 0; y < pixels.length; y++)
{
for (int x = 0; x < pixels[y].length; x++)
{
image.setRGB(x, y, pixels[y][x].getRGB());
}
}
ImageIO.write(image, "gif", new File("abctest.gif"));
ImageIO.write(image, "png", new File("abctest.png"));
}
}
但是,这是生成的 gif。我用紫色背景显示它,以表明图像在中心不是透明的,就像预期的那样。它实际上是黑色的。
不要介意模糊,那是 IrfanView 很烦人。
这是Microsoft Paint中的另一个。相同的gif。
为什么它们在中心不清楚?我知道我设置正确,因为请记住,我还将其保存为 png 和 gif。当我将其保存为 png 时,它会按预期工作。这是 png 的屏幕截图。alpha
有人能帮我指明正确的方向吗?
编辑 - 这是我没有制作的示例图像。
在 IrfanView 中,它看起来像这样。
在这个 gif 中,紫色正确显示,这就是让我失望的原因。
但多亏了@camickr的帮助,我开始认为这实际上只发生在 IrfanView 上,因为我通过它查看的所有其他图像查看器都有效。这包括照片、截图工具、LibreOffice Draw 和 Firefox。在渲染时,它们都显示白色(或背景特定颜色),这意味着它实际上是透明的。
答: 暂无答案
评论