Можно ли получить ширину и высоту файла .gif в scala? [dубликат]

Я могу читать png-файл. Но получение ArrayIndexOutOfBoundsException: 4096 при чтении gif-файла.

byte[] fileData = imageFile.getFileData();
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(fileData);
RenderedImage image = ImageIO.read(byteArrayInputStream)

Выброшенное исключение выглядит как

java.lang.ArrayIndexOutOfBoundsException: 4096
    at com.sun.imageio.plugins.gif.GIFImageReader.read(Unknown Source)
    at javax.imageio.ImageIO.read(Unknown Source)
    at javax.imageio.ImageIO.read(Unknown Source)

, что может быть проблемой и каково разрешение?

14
задан 8 March 2014 в 02:07

1 ответ

Я столкнулся с той же самой проблемой, что и вы, но мне пришлось придерживаться интерфейса ImageIO, чего не было в других библиотеках. Помимо отличного ответа Джека, я просто закрепил существующий класс GIFImageReader несколькими строками кода и немного начал работать.

Скопируйте эту ссылку в PatchedGIFImageReader.java и используйте как таковой:

reader = new PatchedGIFImageReader(null);
reader.setInput(ImageIO.createImageInputStream(new FileInputStream(files[i])));
int ub = reader.getNumImages(true);
for (int x=0;x<ub;x++) {
    BufferedImage img = reader.read(x);
    //Do whatever with the new img bufferedimage

Обязательно измените имя пакета на все, что вы используете.

К сожалению, результаты могут отличаться, поскольку патч был исправлением в 1 минуту, который в основном просто выходит из цикла, если он идет мимо буфера. Некоторые gifs он загружается отлично, другие имеют несколько визуальных артефактов.

Такова жизнь. Если кто-то знает лучшее исправление вместо моего, скажите, пожалуйста.

3
ответ дан 15 August 2018 в 16:45

Другие вопросы по тегам:

Похожие вопросы: