Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > gif-анимация


Автор: Fubu_By 18.9.2007, 12:24
подскажите класс для работы с gif-анимация, соединять несколько картинок и сохранить( в .gif файл или в .swf, типо анимированного банера), со всеми настройками время между кадрами и т.д...

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

Автор: Vasay 19.9.2007, 00:52
Посмотри http://www.gif4j.com/

Автор: Fubu_By 19.9.2007, 03:03
спасибо, будем ковырять

а что есть ещё?

кстати может так кто знает как несколько картинок обьединить в одну .gif и задать интервал между кадрами?

Автор: Aazmandius 19.9.2007, 17:03
по фильтрам могу подсказать отличную библиотеку

http://www.jhlabs.com/ip/filters/index.html

Автор: Fubu_By 21.9.2007, 14:40
Цитата(Vasay @ 19.9.2007,  00:52)
Посмотри http://www.gif4j.com/

поюзал эти библиотеки, всё великолепно, если бы они в углу не всовывали свою ссылку, либо не вставляли по середини рисунка белую линию, вообщем этот класс надо покупать,

есть ещё что-нибудь только бесплатное?

Автор: Vasay 21.9.2007, 15:14
Цитата(Fubu_By @ 21.9.2007,  14:40)
Цитата(Vasay @ 19.9.2007,  00:52)
Посмотри http://www.gif4j.com/

поюзал эти библиотеки, всё великолепно, если бы они в углу не всовывали свою ссылку, либо не вставляли по середини рисунка белую линию, вообщем этот класс надо покупать,

есть ещё что-нибудь только бесплатное?

Упс не заметил :( Каюсь...

Могу посоветовать посмотреть: http://jmge.net/java/gifenc/ 

Код

This is an animated gif encoder : http://jmge.net/java/gifenc/

Animated GIF Example :

import net.jmge.gif.Gif89Encoder;
// ...
void writeAnimatedGIF(Image[] still_images,
String annotation,
boolean looped,
double frames_per_second,
OutputStream out) throws IOException
{
Gif89Encoder gifenc = new Gif89Encoder();
for (int i = 0; i < still_images.length; )
gifenc.addFrame(still_images);
gifenc.setComments(annotation);
gifenc.setLoopCount(looped ? 0 : 1);
gifenc.setUniformDelay((int) Math.round(100 / frames_per_second));
gifenc.encode(out);
}


Но я ничего связанного с гифом не тестил, разве что писал свой jpeg.

Автор: Fubu_By 22.9.2007, 16:07
Цитата(Vasay @ 21.9.2007,  15:14)
Цитата(Fubu_By @ 21.9.2007,  14:40)
Цитата(Vasay @ 19.9.2007,  00:52)
Посмотри http://www.gif4j.com/

поюзал эти библиотеки, всё великолепно, если бы они в углу не всовывали свою ссылку, либо не вставляли по середини рисунка белую линию, вообщем этот класс надо покупать,

есть ещё что-нибудь только бесплатное?

Упс не заметил :( Каюсь...

Могу посоветовать посмотреть: http://jmge.net/java/gifenc/ 

Код

This is an animated gif encoder : http://jmge.net/java/gifenc/

Animated GIF Example :

import net.jmge.gif.Gif89Encoder;
// ...
void writeAnimatedGIF(Image[] still_images,
String annotation,
boolean looped,
double frames_per_second,
OutputStream out) throws IOException
{
Gif89Encoder gifenc = new Gif89Encoder();
for (int i = 0; i < still_images.length; )
gifenc.addFrame(still_images);
gifenc.setComments(annotation);
gifenc.setLoopCount(looped ? 0 : 1);
gifenc.setUniformDelay((int) Math.round(100 / frames_per_second));
gifenc.encode(out);
}


Но я ничего связанного с гифом не тестил, разве что писал свой jpeg.

это уже что-то похожее спасибо, правдо с http://www.gif4j.com/ небо и земля =)) , сильно урезаный.
а тот класс, что ты работал с jpeg, может конвертировать jpeg в gif, можешь дать ссылку на него?

ещё есть класс которые анимированный gif раскладует на кадры?

Автор: Fubu_By 23.9.2007, 13:13
Цитата(Aazmandius @ 19.9.2007,  17:03)
по фильтрам могу подсказать отличную библиотеку

http://www.jhlabs.com/ip/filters/index.html

Подключил эту библиотеку, создал методы

Код

...
Image[] images = new Image[4];
...
images[i - 1] = Toolkit.getDefaultToolkit().createImage(outputDir + "/" +
          "house_" + i + ".gif");
BufferedImage image = new BufferedImage(images[i - 1].getHeight(null), 
                                              images[i - 1].getWidth(null),
                                              BufferedImage.TYPE_INT_ARGB);
image = new BrushedMetalFilter(images[i - 1].getHeight(null), 
                                     images[i - 1].getWidth(null), 
                                     0.1f, true, 0.1f).filter(image, image);
...

но какойбы фильтр не подключаю выскакивает всё время такого рода ошибка:
Код

"Untitled1.java": cannot access com.jhlabs.image.BrushedMetalFilter,bad class file: e:\Programm\java\lib\gif\Filters\lib\Filters.jar\com\jhlabs\image\BrushedMetalFilter.class,class file has wrong version 49.0, should be 48.0,Please remove or make sure it appears in the correct subdirectory of the classpath. at line 64, column 19

что не так? подсвечивает строку:
Код

image = new BrushedMetalFilter(images[i - 1].getHeight(null), 
                                     images[i - 1].getWidth(null), 
                                     0.1f, true, 0.1f).filter(image, image);

Автор: LSD 23.9.2007, 15:24
Библиотека скомпилированна под JDK 1.5, а ты пытаешься ее запустить на 1.4. Или скачай версию библиотеки под 1.4 (если есть) или замени JDK.

Автор: Vasay 24.9.2007, 00:31
Цитата

а тот класс, что ты работал с jpeg, может конвертировать jpeg в gif, можешь дать ссылку на него?


Нет. Зато он умеет вкладывать цвз в JPEG  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)