Чтение и запись Java Gif

#java #gif #animated-gif

Вопрос:

Я просто хочу прочитать gif и записать его в файл (затем я добавлю его в буферизованное изображение с другими изображениями и создам одно общее изображение). Но теперь я не знаю, почему мой gif становится статичным после чтения и записи.

 BufferedImage bufferedImage = ImageIO.read(new File("Uzga.gif"));
ImageIO.write(bufferedImage, "gif", new File("1.gif"));
 

Комментарии:

1. BufferedImage представляет собой одно статичное изображение. Он не поддерживает анимированные изображения.

Ответ №1:

Я думаю, что вы не можете создать анимированный подарок просто с помощью ImageIO.напишите, вам нужно создать файл подарка в правильном формате для поддержки анимации, посмотрите на: http://openimaj.org/apidocs/org/openimaj/demos/sandbox/image/gif/GifSequenceWriter.html

Конструктор класса GifSequencerWriter принимает в качестве параметров в этом порядке поток для файла, в котором будут склеены все изображения (выходной файл), тип изображения RGB, размер блока каждого отдельного изображения внутри большого файла и логическое значение, если значение true, анимация воспроизводится в цикле. Буферизованное изображение img может быть таким же, как вы определяете. Большой файл будет содержать все отдельные изображения или фоторамки, и при последовательном воспроизведении будет создаваться анимационный эффект.

Некоторые примеры кода:

 System.out.println("Writing to file.");
ImageOutputStream stream = null;
BufferedImage img = BufferedImage bufferedImage = ImageIO.read(new File("Uzga.gif"));;
try {
      stream = new FileImageOutputStream(outFile);
      GifSequenceWriter writer = new GifSequenceWriter(stream, BufferedImage.TYPE_INT_RGB, BLOCK_SIZE, true);
      for (BufferedImage img: imgs) 
      {
        writer.writeToSequence(img);
      }
      writer.close();
    } catch (IOException e) {
    e.printStackTrace();
}
 

Комментарии:

1. О, но еще один вопрос, как я могу сделать массив изображений из одного gif?