小编典典

如何使用ImageWriter和ImageIO在Java中编码动画GIF?

java

我到处都是,但是似乎找不到任何易于理解的解释。(我发现其他Java用户编写的类和方法可以做到这一点,但我希望自己编写。)


阅读 246

收藏
2020-11-26

共1个答案

小编典典

这是GIFanimcreateImage()方法。也许那会给您一个开始。

public byte[] createImage() throws Exception {

    ImageWriter iw = ImageIO.getImageWritersByFormatName("gif").next();

    ByteArrayOutputStream os = new ByteArrayOutputStream();
    ImageOutputStream ios = ImageIO.createImageOutputStream(os);
    iw.setOutput(ios);
    iw.prepareWriteSequence(null);
    int i = 0;

    for (AnimationFrame animationFrame : frameCollection) {

        BufferedImage src = animationFrame.getImage();
        ImageWriteParam iwp = iw.getDefaultWriteParam();
        IIOMetadata metadata = iw.getDefaultImageMetadata(
            new ImageTypeSpecifier(src), iwp);

        configure(metadata, "" + animationFrame.getDelay(), i);

        IIOImage ii = new IIOImage(src, null, metadata);
        iw.writeToSequence(ii, null);
        i++;
    }

    iw.endWriteSequence();
    ios.close();
    return os.toByteArray();
}

请注意,这是一个非常幼稚的实现,所生成的图像要比使用压缩调色板并执行其他优化的库所生成的图像大得多。实现这样的库将是一项重要的任务。

2020-11-26