1.将图片合成.gif
ubuntu中可以用convert命令对图像的格式和大小等进行转换(convert命令可以用在脚本中),但是convert不是ubuntu自带的命令,需要先安装ImageMagick,之后才可以使用。
安装ImageMagick:
sudo apt-get install imagemagick
测试是否安装成功,首先查看版本,命令:
convert -version
如果看到下面的信息,则说明安装成功:
1 Version: ImageMagick 6.7.7-10 2014-03-06 Q16 http://www.imagemagick.org 2 Copyright: Copyright (C) 1999-2012 ImageMagick Studio LLC 3 Features: OpenMP
利用ubantu系统里的的convert导出.gif动图,在存放图片的文件夹里面打开终端,输入命令:
/usr/bin/convert -quality 90% frames*.png movie.gif
便可以将名字为frames*的图片导出为movie.gif动图了。
2.生成动图时出现问题:
convert-im6.q16: cache resources exhausted `three-view.gif' @ error/cache.c/OpenPixelCache/4083. convert-im6.q16: memory allocation failed `three-view.gif' @ error/quantize.c/AssignImageColors/496.
问题的原因是Ubuntu系统分配给ImageMagick的Memory不够
通过执行 identify -list resource 后输出的内容可以发现,ImageMagick的Memory只有256MiB:
Resource limits: Width: 16KP Height: 16KP List length: 18.446744EP Area: 128MP Memory: 256MiB Map: 512MiB Disk: 1GiB File: 768 Thread: 8 Throttle: 0 Time: unlimited
我们需要在policy.xml文件中修改这个限制。
首先通过 convert -list policy 命令找到policy.xml文件所在的路径:
Path: /etc/ImageMagick-6/policy.xml ####这个就是policy.xml文件所在的路径 Policy: Resource name: disk value: 1GiB ......
然后执行 sudo vim /etc/ImageMagick-6/policy.xml ,在找到下面几行:
<policy domain="resource" name="memory" value="256MiB"/> ####将这里的256修改大一点,比如2048 <policy domain="resource" name="map" value="512MiB"/> <policy domain="resource" name="width" value="16KP"/> <policy domain="resource" name="height" value="16KP"/> <!-- <policy domain="resource" name="list-length" value="128"/> --> <policy domain="resource" name="area" value="128MB"/> <policy domain="resource" name="disk" value="1GiB"/>
保存后,再次执行 identify -list resource ,就会显示memory变为了2GiB了:
Resource limits: Width: 16KP Height: 16KP List length: 18.446744EP Area: 128MP Memory: 2GiB ####变成了2GiB了 Map: 512MiB Disk: 1GiB File: 768 Thread: 8 Throttle: 0 Time: unlimited
后面再执行 convert -quality 90% frames*.png movie.gif 就不会出现之前的问题了。