Есть ли способ на java разложить *.gif на image[]. Очень-очень срочно
Вот так вы получите сырые кадры из 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: насколько мне известно формат поддерживает экзотические ситуации и ухищрения, например когда кадры разного размера, код выше этого не учитывает..
Виртуальный выделенный сервер (VDS) становится отличным выбором
Пишу веб-приложение и при объявлении сущностей использую ломбокПриложение компилируется и работает исправно, но в коде, где происходит работа...
Я ЧАЙНИК ! Не ругайтесь сильно ! дело в том что символ делителя ещё и повторяется в самом значении несколько разНа выходе имею кашу((( Как обозначить...
Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском