gpt4 book ai didi

java - 使用 ImageIO 从具有 Alpha 透明度的图像中保存具有索引透明度的 GIF

转载 作者:行者123 更新时间:2023-12-01 05:33:37 26 4
gpt4 key购买 nike

我有一个具有 alpha 透明度的 BufferedImage,我需要将其保存为具有索引透明度的 GIF。没有半透明像素,因此应该可以进行转换。

使用http://gman.eichberger.de/2007/07/transparent-gifs-in-java.html下找到的代码,我定义一个透明度颜色(例如绿色,它不是当前图像的一部分)并使其透明。工作正常,但它混合了颜色表,所有颜色看起来都很糟糕(尽管我只使用 3 种不同的颜色)。

有没有一种方法可以调整这一点,或者使用另一种方法将此类 ARGB 图像转换为索引图像,而不会造成明显的质量损失?

我的图像的构建方式:

BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Graphics2D graphics = (Graphics2D)image.getGraphics();
graphics.setColor(backgroundColor);
graphics.fillRect(0, 0, width, height);
// Some more painting here
graphics.dispose();

感谢您的帮助!

最佳答案

使用 ImageIO 处理透明度,尤其是保存为 GIF 图像时,简直是一场噩梦。对于不同的图像格式,甚至相同的图像格式但不同的变体,ImageIO 中的透明度支持是不完整的。

如果你已经有一个二进制透明的 BufferedImage,我有一个颜色量化工具和一个 GIF encoder将其另存为具有透明度的 GIF。如果图像的实际颜色小于 256,则不会应用量化。否则,颜色将减少到小于 256,但保留透明颜色。可以在量化过程中应用抖动,因此生成的图像尺寸可能比平常更大。

以下屏幕截图显示了两张图像:左边一张是具有 Alpha channel 透明度的原始 PNG 图像,而右边一张是从同一 PNG 图像转换而来的透明 GIF 图像。 GIF 图像实际上减少为 128 色,但质量很棒。 (PNG:49K,GIF:17K)

enter image description here

图片来源:http://svg2rlg.googlecode.com/svn-history/r2/trunk/test-suite/png/butterfly.png

关于java - 使用 ImageIO 从具有 Alpha 透明度的图像中保存具有索引透明度的 GIF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8573142/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com