2015-12-17 2 views
2

В программе Java вы можете хранить изображения, такие как .png, .jpg и т. Д. В BufferedImage. Я не думаю, что он работает для анимированных gif-изображений, поскольку он, кажется, теряет анимацию.Храните анимированный GIF-образ в программе Java

В настоящее время я получаю нормальные образы, как:

BufferedImage image = ImageIO.read(new URL(images.get(x))); 
String type = images.get(x).substring(images.get(x).length() - 3, images.get(x).length()); 
ImageIO.write(image, type, new File(title + "/" + filename)); 

Где images является String[] из URL.

Что касается GIF изображения я получаю их:

byte[] b = new byte[1]; 
URL url = new URL(images.get(x)); 
URLConnection urlConnection = url.openConnection(); 
urlConnection.connect(); 
DataInputStream di = new DataInputStream(urlConnection.getInputStream()); 

FileOutputStream fo = new FileOutputStream(title + "/" + filename); 
while (-1 != di.read(b, 0, 1) && downloading)   
    fo.write(b, 0, 1); 
di.close(); 
fo.close(); 

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

ответ

1

Если вы заинтересованы только в хранении gif в памяти, а не в отображении его из программы java. Вы могли бы записать полученные данные в ByteArrayOutputStream, а не в FileOutputStream, а затем взять полученный массив байтов и записать его в FileOutputStream позднее.

Если вы хотите отобразить анимированный gif, вы можете проверить верхний ответ в this post, хотя первый комментарий к ответу, похоже, имеет проблему, похожую на вашу.

+0

Как бы я начал записывать данные из 'DataInputStream' в' ByteArrayOutputStream'? –

+0

@CodedApple Вы должны иметь возможность сделать это, просто заменив строку 'FileOutputStream fo = new FileOutputStream (...);' с 'ByteArrayOutputStream bo = new ByteArrayOutputStream();'. Затем, после того как вы написали gif в поток, вы можете получить байты, вызвав 'toByteArray'. Затем, когда вы хотите записать эти байты в файл, просто откройте новый 'FileOutputStream' и напишите в него массив байтов. – clearlyspam23

Смежные вопросы