1

GifDecoder用来读取动画 .gif 文件并AnimGifEncoder编写它。(链接

如果我显示它们读取的原始帧GifDecoder正确显示并且是透明的,但是如果我显示由AnimatedGifEncoder透明度创建的帧都是错误的。

   GifDecoder gif = new GifDecoder();
   gif.read("image.gif");

   AnimatedGifEncoder e = new AnimatedGifEncoder();
   e.start("newimage.gif");
   e.setTransparent(Color.BLACK);

   for (int i=0;i<gif.getFrameCount();i++) {
        anim.addFrame(gif.getFrame(i));
        anim.setDelay(gif.getDelay(i));
   }

   anim.finish();

在此示例中,我将透明颜色设置为黑色。但实际上我想从中获取透明颜色信息,GifDecoder但我不知道如何。

4

2 回答 2

1

我正在使用以下解决方案,尽管缩放后仍有一些 gif 文件一团糟......:

(至少它似乎与大多数不透明的 gif 相处得很好)

Color transparentColor = null;
BufferedImage firstFrameImage = ImageIO.read([sourceFileHere]);

if (firstFrameImage.getColorModel() instanceof IndexColorModel) {
   IndexColorModel cm = (IndexColorModel) firstFrameImage.getColorModel();
   int transparentPixel = cm.getTransparentPixel();
   transparentColor = new Color(cm.getRGB(transparentPixel), true);
}

e.setTransparent(transparentColor);
于 2012-07-20T06:42:38.137 回答
0

这都是很久以前的事了,但当时我确实设法让它工作了。无需再次挖掘代码...我通过以下方式使其工作:

  1. 扫描原始图像并将透明区域设置为原始图像中不存在的颜色。

  2. 将 AnimGifEncoder 内部的透明颜色设置为之前分配给透明区域的颜色。

于 2019-11-18T05:05:39.793 回答