我找遍了所有地方,但似乎找不到任何易于理解的解释。 (我发现其他 Java 用户编写的类和方法可以执行此操作,但我希望自己编写。)
最佳答案
这里是 GIFanim 的 createImage()
方法.也许这会给你一个开始。
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/