从R运行ImageMagick时出错:参数无效

时间:2013-04-30 23:09:28

标签: r shell animation imagemagick system

我正在尝试在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

提前致谢...

4 个答案:

答案 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")

还要看看这个帖子

ImageMagick - Issue with Windows and convert function

答案 2 :(得分:0)

我知道其他人已经找到了解决问题的方法,但是有一种更简单的解决方法,而不必在system()中包含整个路径。只需设置ani.options(convert = 'pathway/convert.exe') 加载动画包后。

答案 3 :(得分:0)

尝试所有这些修补程序以及thesethese都没有成功后,我使用了替代软件进行转换,其中几个已经描述here。我是Windows用户,发现VirtualDub网站中包含的简单说明很快完成了这项任务。