Я могу читать 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)
, что может быть проблемой и каково разрешение?
Я столкнулся с той же самой проблемой, что и вы, но мне пришлось придерживаться интерфейса 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 он загружается отлично, другие имеют несколько визуальных артефактов.
Такова жизнь. Если кто-то знает лучшее исправление вместо моего, скажите, пожалуйста.