本站内容版权属于本人。转载须告知本人,写明出处,并在文首提供指向本站对应文章的链接。
本文链接:在Java中使用AnimatedGifEncoder生成GIF动画
		本文链接:在Java中使用AnimatedGifEncoder生成GIF动画
前段时间有需要用到生成GIF动画的地方,搜索了一下,但是并没有发现有库来做这件事情,见得比较多的是由Kevin Weiner编写的AnimatedGifEncoder.java。其作者授权所有人可以以任何方式使用这份代码,但是需要注意代码中所使用的LZW算法由Unisys掌握专利权。不过鉴于此专利在2006年就已经在大部分国家及地区过期了,所以现在应该可以放心地使用了。
AnimatedGifEncoder包含了大部分GIF图像的功能,比如帧间延时,换帧方式,透明度选择,还可以生成256色调色板。但是每帧位置就无法调节了,不过可以通过修改部分代码来完成。下面是一个最简单的使用例子:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | import java.awt.*; import java.awt.image.BufferedImage; import java.io.IOException; public class Test {     public static final int SIZE = 200;     public static void main(String[] args) throws IOException {         AnimatedGifEncoder encoder = new AnimatedGifEncoder();         encoder.start("out.gif");         encoder.setTransparent(Color.WHITE);         encoder.setRepeat(0);         encoder.setDelay(30);         BufferedImage img = new BufferedImage(SIZE, SIZE, BufferedImage.TYPE_3BYTE_BGR);         Graphics2D g2d = img.createGraphics();         for (int i=0; i<100; i++) {             g2d.setColor(Color.WHITE);             g2d.fillRect(0, 0, SIZE, SIZE);             g2d.setColor(Color.BLACK);             g2d.drawOval(0, i, 100, 100);             encoder.addFrame(img);         }         g2d.dispose();         encoder.finish();     } } | 
这个例子会生成一个200×200,透明背景,黑色的圆循环向下运动的GIF动画:
