Как кодировать анимированный GIF в Java, используя ImageWriter и ImageIO? - PullRequest
1 голос
/ 18 декабря 2011

Я посмотрел повсюду, но не могу найти легкого для понимания объяснения. (Я нашел классы и методы, написанные другими пользователями Java, которые могут сделать это, но я надеюсь написать свой собственный.)

1 Ответ

4 голосов
/ 18 декабря 2011

Вот метод createImage() GIFanim . Возможно, это даст вам начало.

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

Обратите внимание, что это очень наивная реализация, которая создает изображения значительно большего размера, чем можно сделать с помощью библиотеки, которая сжимает цветовую палитру и выполняет другие оптимизации. Реализация подобной библиотеки была бы важной задачей.

...