使用算法制作动画 GIF 的最佳方法是啥?
Posted
技术标签:
【中文标题】使用算法制作动画 GIF 的最佳方法是啥?【英文标题】:What's the best way to make an animated GIF using an algorithm?使用算法制作动画 GIF 的最佳方法是什么? 【发布时间】:2010-10-31 03:13:32 【问题描述】:我有一个用于在各种尺寸(大尺寸,如 100x100)的棋盘上进行骑士旅行的算法,我想为结果制作动画。每次马移动到一个新的方格时,(方格)画布中的相应像素都会改变颜色,直到最终整个画布都被着色。生成的电影将可在有关算法的网页上观看。
如果我想要广泛的浏览器支持,动画 GIF 似乎是最好的方法(尽管欢迎其他建议)。最好的工具或库是什么?我很乐意使用 Linux 或 Mac 计算机上免费提供的任何东西。
实际的算法太长,无法在此处提供有用的示例(如果您真的很好奇,请参阅this paper),但这里是(无聊的)king's 在 8x8 板上游览的伪代码:
movie = new Movie()
frame = new Frame()
frame.fillRectangle((1,1), 8, 8, BLUE)
for row in [1..8]
if (row.isOdd()) colrange = [1..8] else colrange = [8..1]
for col in colrange
frame.colourPixel(row, col, RED)
movie.addFrame(frame)
movie.saveAsGIF("tour.gif")
加分题:我们可以利用这部电影的特殊功能来减小文件大小吗? Wikipedia article 表明我们可以做到这一点,如果我们只改变一些像素 - 事实上我们每帧只改变一个!
【问题讨论】:
不要使用动画 GIF。转成电影格式,压缩率会高很多 你建议什么格式,用什么工具来创建它? 压缩级别取决于很多事情。对于简单的图像,gif 就可以了。此外,尺寸可能不像简单性那么重要。动画 gif 不是很棒的技术,但它们得到了很好的支持。 【参考方案1】:您可以使用giflib 来完成此操作。文档在下载中。
例如,this page 包含使用 giflib 创建的动画 gif 以及用于生成动画的程序的源代码。了解如何将 giflib 用于动画可能会有所帮助。
编辑:如果您不介意进行一些后期处理,另一种选择是使用简单格式 (such as PPM) 输出帧,然后使用make the animated gif using ImageMagick。
至于你的额外信用问题:ImageMagick 甚至可以为你做frame comparisons 以减少输出的大小。
【讨论】:
谢谢。我正在考虑采用您的第二个选项:使用 Python Image Library 绘制一组 .gif,然后使用 ImageMagick 将它们组合成一个(优化的)动画。【参考方案2】:针对您的额外信用问题,您可以通过仅在新框架上绘制图像的更改部分并将其余部分设置为透明来自己进行此改进。
【讨论】:
知道了。似乎 ImageMagick 会为我进行比较和优化,但如果这似乎不起作用,我可以手动进行。以上是关于使用算法制作动画 GIF 的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章