我正在尝试在R中制作GIF动画。我有一个矩阵数组,我希望将其转换为GIF动画。我的策略受这个例子的启发:
http://ryouready.wordpress.com/2010/11/21/animate-gif-images-in-r-imagemagick/
其中下面的代码在R中生成11个带有“png”函数的PNG-Pictures。接下来它调用外部ImageMagick程序“convert”来编译GIF动画。
dir.create("examples")
setwd("examples")
# Animated countdown from 10 to "GO!".
png(file="example%02d.png", width=200, height=200)
for (i in c(10:1, "G0!")){
plot.new()
text(.5, .5, i, cex = 6)
}
dev.off()
# convert the .png files to one .gif file using ImageMagick.
system("convert -delay 80 *.png example_1.gif")
#shell("convert -delay 80 *.png example_1.gif")
问题是R似乎没有找到exe文件“convert”,它是ImageMagick的一部分并安装在C盘驱动器上(C:\ Program Files \ ImageMagick-6.8.5-Q16)。在对网站i am linking to earlier的评论中,建议Windows用户使用“shell”而不是“system”来运行外部程序,但两者都不起作用。错误消息是
Invalid parameter - 80
Warning message:
running command 'convert -delay 80 *.png example_1.gif' had status 4
我已尝试在系统属性中更改Windows PATH环境变量,如此answer中所述,但PATH变量已在我的系统上进行了核心定义。我也试过指定convert.exe文件的整个字符串,但也没有运气......
如何让ImageMagick通过R运行?
规格: Windows 7 Servicepack 1, R 3.0.0
提前致谢...
答案 0 :(得分:6)
在Windows上,有几个convert.exe命令,所有这些命令都在PATH中。因此,您必须指定正确的convert.exe可执行文件的路径。在我的情况下,我把它放在LyX文件夹中(但是,你也可以在ImageMagick安装中找到它)。 如果要粘贴,请注意引号,反斜杠和间距。例如。来自R:
system('"C:\\Program Files (x86)\\LyX 2.0\\imagemagick\\convert.exe" -delay 20 -loop 0 files_*.png animation.gif')
答案 1 :(得分:2)
我是Windows 10用户,在定义工作目录后,我使用
在R中工作shell("convert -set delay 80 -loop 0 *.jpg example_shell_test.gif")
在cmd内,每个命令表示以下
convert =来自ImageMagick的开放转换函数
-set delay x =将每帧之间的延迟时间设置为x(1000 = 1秒)
-loop 0 =永远循环,如果设置为1,它将通过图像一次
*。[图像类型] =和。[图像类型]
的文件[输出gif的名称] .gif =将新的.gif保存为
我首先在命令提示符下工作,导航到目录并运行行
convert -set delay 80 -loop 0 *.jpg example_cmd_test.gif
在此之前我正在使用 -delay = 80 而不是 - 设置延迟80 在cmd并得到错误: convert:选项的无效参数' -delay':= @ error / convert.c / ConvertImageCommand / 1277。
在R中使用system()命令并使用正确的" -set delay x"我收到了错误:
> system("convert -set delay = 80 -loop 0 *.jpg example_3.gif")
Invalid Parameter - delay
Warning message:
running command 'convert -set delay = 80 -loop 0 *.jpg example_3.gif' had status 4
shell()中的其他错误
> shell("convert -set delay = 80 -loop 0 *.jpg example_shell_test11.gif")
convert: unable to open image '80': No such file or directory @ error/blob.c/OpenBlob/3094.
convert: no decode delegate for this image format `' @ error/constitute.c/ReadImage/509.
Warning messages:
1: running command 'C:\WINDOWS\system32\cmd.exe /c convert -set delay = 80 -loop 0 *.jpg example_shell_test11.gif' had status 1
2: In shell("convert -set delay = 80 -loop 0 *.jpg example_shell_test11.gif") :
'convert -set delay = 80 -loop 0 *.jpg example_shell_test11.gif' execution failed with error code 1
我在R中用shell()运行它,它似乎工作正常
shell("convert -set delay = 80 -loop 0 *.jpg example_shell_test.gif")
还要看看这个帖子
答案 2 :(得分:0)
我知道其他人已经找到了解决问题的方法,但是有一种更简单的解决方法,而不必在system()中包含整个路径。只需设置ani.options(convert = 'pathway/convert.exe')
加载动画包后。
答案 3 :(得分:0)
尝试所有这些修补程序以及these和these都没有成功后,我使用了替代软件进行转换,其中几个已经描述here。我是Windows用户,发现VirtualDub网站中包含的简单说明很快完成了这项任务。