Java. gif to Image[]

126
07 декабря 2020, 15:20

Есть ли способ на java разложить *.gif на image[]. Очень-очень срочно

Answer 1

Вот так вы получите сырые кадры из gif, однако они будут содержать только дельты между кадрами:

 static List<BufferedImage> getFramesRaw(File gif) throws IOException {
    List<BufferedImage> frames = new ArrayList<>();
    ImageReader ir = new GIFImageReader(new GIFImageReaderSpi());
    ir.setInput(ImageIO.createImageInputStream(gif));
    for(int i = 0; i < ir.getNumImages(true); i++)
        frames.add(ir.read(i));
    return frames;
}

И вот примерно так их можно склеить в целые картинки:

static List<BufferedImage> getFrames(File gif) throws IOException {
    List<BufferedImage> copies = new ArrayList<>();
    List<BufferedImage> frames = getFramesRaw(gif);
    copies.add(frames.remove(0));
    for (BufferedImage frame : frames) {
        BufferedImage img = new BufferedImage(copies.get(0).getWidth(),
                copies.get(0).getHeight(), BufferedImage.TYPE_INT_RGB);
        Graphics g = img.getGraphics();
        g.drawImage(copies.get(copies.size()-1),0,0,null);
        g.drawImage(frame,0,0,null);
        copies.add(img);
    }
    return copies;
}

Проверено на этой гифке

PS: насколько мне известно формат поддерживает экзотические ситуации и ухищрения, например когда кадры разного размера, код выше этого не учитывает..

READ ALSO
Использование Lombok

Использование Lombok

Пишу веб-приложение и при объявлении сущностей использую ломбокПриложение компилируется и работает исправно, но в коде, где происходит работа...

155
Разделить переменную на несколько, SPLIT?

Разделить переменную на несколько, SPLIT?

Я ЧАЙНИК ! Не ругайтесь сильно ! дело в том что символ делителя ещё и повторяется в самом значении несколько разНа выходе имею кашу((( Как обозначить...

107
JS массив объектов

JS массив объектов

Я только начинаю учить JS и застряла на одном задании, прошу вашей помощи

129
Валидность кода JS [закрыт]

Валидность кода JS [закрыт]

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском

141