Как скачать анимированный gif с URL-адреса с помощью Java?

Я много пробовал, но все, что я могу получить, это только первое изображение, а не анимированный gif.

Лучшим решением на данный момент было загрузить анимированный gif в иконку, но мне нужен файл. Вот код:

final URL url = new URL("http://www.freeallimages.com/wp-content/uploads/2014/09/animated-gif-images-2.gif");

JLabel l = new JLabel(new ImageIcon(url));
JOptionPane.showMessageDialog(null, l);

Кто-нибудь может здесь помочь?

Этот код просто получает первое изображение gif (не анимированное):

public static void saveImage(String imageUrl, String destinationFile) throws IOException {
    URL url = new URL(imageUrl);
    InputStream is = url.openStream();
    File file = new File(destinationFile);
    file.getParentFile().mkdirs();
    file.createNewFile();
    OutputStream os = new FileOutputStream(destinationFile );

    byte[] b = new byte[2048];
    int length;

    while ((length = is.read(b)) != -1) {
        os.write(b, 0, length);
    }

    is.close();
    os.close();
}

person user123453453    schedule 13.09.2014    source источник
comment
Ссылка URL имеет InputStream, из которого вы должны иметь возможность читать   -  person MadProgrammer    schedule 13.09.2014
comment
GIF будет загружен правильно. Некоторые просмотрщики и java не будут анимировать gif. Хотя, приложив некоторые усилия, вы можете получить все кадры в java.   -  person Joop Eggen    schedule 13.09.2014
comment
Этот код должен работать. Я не думаю, что можно просто скачать «неанимированную» версию! Как вы показываете гифку?   -  person Sanjay Manohar    schedule 13.09.2014
comment
Просто с помощью средства просмотра изображений Windows по умолчанию   -  person user123453453    schedule 13.09.2014
comment
Средство просмотра фотографий Windows не отображает анимированные GIF-файлы.   -  person Joe    schedule 13.09.2014
comment
О... хорошо, проблема с 8-м слоем... Спасибо за быструю помощь :-)   -  person user123453453    schedule 13.09.2014
comment
Вот ваш ответ: получить все кадры gif-изображения.   -  person afzalex    schedule 13.09.2014
comment
Код OK выше работает, если изображение просматривается, например. ИрфанВью   -  person user123453453    schedule 13.09.2014


Ответы (1)


Что касается кода, то все в порядке, и GIF должен загрузиться правильно. (Сравните размеры исходного и загруженного GIF для подтверждения). Теперь есть два момента:

1. Средство просмотра фотографий Windows не может отображать анимированные GIF-файлы, используйте вместо него Internet Explorer.
2. В java не используйте поток Event-Dispatcher для отображения любого анимированного GIF, он точно не оживится. Попробуйте использовать другой поток для отображения любого кадра, содержащего анимированный GIF.

Как видно из вашего кода, вы инициализировали диалоговое окно из JOptionPane вскоре после инициализации JLabel с анимированным GIF, не делайте этого. Все диалоги в JOptionPane являются модальными, что блокирует выполнение вашего текущего потока, и поэтому вы не увидите никакой анимации.

person Shailendra Pandey    schedule 13.09.2014