本站内容版权属于本人。转载须告知本人,写明出处,并在文首提供指向本站对应文章的链接。
本文链接:在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动画: