如何将多帧图像按照恒定帧率生成GIF。
前言
- 光是文字没啥具体指向,先把网上的一个成品贴出来:
- 要实现这个功能,得先搞清楚大致原理,其中最主要的实际上就是对GIF这种格式的文件进行操作。
当然,在这里我们可以细分:- 从GIF里面读取每一帧的图像
- 对图像进行处理,比如缩放/拉伸、添加文字等等
- 有了若干图像帧,如何按照恒定帧率生成GIF
实现
- 这里讲如何将多帧图像按照恒定帧率生成GIF
- 在生成GIF前有必要了解一下其具体格式,大致有印象即可,可以深入但没必要
GIF图形文件格式文档 -
网上有很多轮子,参考了这篇Android 开发之 MP4 文件转 GIF 文件详解,
将Android实现改为了JVM实现/** * 将静态图片列表以恒定帧率的方式合成gif * * @param imgs 图片列表 * @param gif gif保存路径 * @param frameRate 帧率 */ public static void merge(List<BufferedImage> imgs, String gif, int frameRate) { GIFEncoder encoder = new GIFEncoder(); encoder.init(imgs.get(0)); encoder.setFrameRate(frameRate); encoder.start(gif); for (int i = 1; i < imgs.size(); i++) { encoder.addFrame(imgs.get(i)); } encoder.finish(); }
- 在生成GIF前有必要了解一下其具体格式,大致有印象即可,可以深入但没必要