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 就不會出現之前的問題了。