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

标签 java image gif animated-gif javax.imageio

我找遍了所有地方,但似乎找不到任何易于理解的解释。 (我发现其他 Java 用户编写的类和方法可以执行此操作,但我希望自己编写。)

最佳答案

这里是 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();
}

请注意,这是一个非常简单的实现,它生成的图像比使用压缩调色板和执行其他优化的库生成的图像大得多。实现这样的图书馆将是一项重大任务。

关于java - 如何使用 ImageWriter 和 ImageIO 在 Java 中编码动画 GIF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8549460/

相关文章:

java - 特定字符串的正则表达式反向匹配?

css - 链接背景图像

java - Android - 延迟加载图像到 ListView 的问题

bash - 使用 ImageMagick 和许多图像制作 GIF 动画

javascript - 仅在屏幕 View 中播放 gif 文件

java - GWT/EXT + Spring Security 应用程序中的双重身份验证

AS400 中的 Java 系统属性

java - 如何使用 Spring Boot 在运行时修改 @Qualifer 值

python - 使用python将图像插入到cassandra

android - 将 gif 添加到 Jetpack Compose