How to encode an animated GIF in Java, using ImageWriter and ImageIO?

前端 未结 1 949
栀梦
栀梦 2021-01-25 18:35

I\'ve looked all over the place, but can\'t seem to find any easy to understand explanation. (I\'ve found classes and methods written by other Java users that can do this, but I

相关标签:
1条回答
  • 2021-01-25 19:00

    Here is the createImage() method of GIFanim. Perhaps that will give you a start.

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

    Note that this is a very naïve implementation, that produces images that are significantly larger than can be made with a library that compresses the color palette and performs other optimizations. Implementing a library like that would be a significant task.

    0 讨论(0)
提交回复
热议问题