10

我正在尝试在 R 中制作 GIF 动画。我有一组矩阵,我希望将其转换为 GIF 动画。我的策略灵感来自这个例子:

http://ryouready.wordpress.com/2010/11/21/animate-gif-images-in-r-imagemagick/

以下代码在 R 中使用“png”函数生成 11 个 PNG 图片。接下来,它调用外部 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 似乎没有找到作为 ImageMagick 一部分并安装在 C 驱动器上的 exe 文件“convert”(C:\Program Files\ImageMagick-6.8.5-Q16)。在对我之前链接到的网站的评论中,建议 Windows 用户使用“shell”而不是“system”来运行外部程序,但两者都不起作用。错误信息是

Invalid parameter - 80
Warning message:
running command 'convert -delay 80 *.png example_1.gif' had status 4

我已尝试更改系统属性中的 Windows PATH 环境变量,如this answer中所建议的那样,但 PATH 变量已在我的系统上正确定义。我还尝试指定 convert.exe 文件的整个字符串,但也没有运气......

我怎样才能让 ImageMagick 通过 R 运行?

规格:Windows 7 Servicepack 1、R 3.0.0

提前致谢...

4

4 回答 4

7

在 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')
于 2015-02-17T03:42:37.290 回答
3

我是 Windows 10 用户,在定义工作目录后,我使用 R 在 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,它将遍历图像一次

*.[image type]= 和 .[image type] 的文件

[输出 gif 的名称].gif = 将新的 .gif 保存为

通过导航到目录并运行该行,我首先在命令提示符下工作

convert -set delay 80 -loop 0 *.jpg example_cmd_test.gif

在此之前,我在 cmd 中使用 -delay = 80 而不是 -set delay 80 并得到错误:convert: invalid argument for option '-delay': = @ error/convert.c/ConvertImageCommand/1277。

在 R 中,使用带有正确“-set delay x”的 system() 命令出现错误:

> 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 - Windows 问题和转换功能

于 2017-03-31T15:02:40.393 回答
0

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

于 2014-12-03T09:11:03.860 回答
0

在尝试了所有这些修复以及这些这些都没有成功之后,我使用了替代软件进行转换,其中一些在此处进行了描述。我是 Windows 用户,发现该站点中包含的VirtualDub的简单说明很快就完成了这项任务。

于 2015-05-08T08:21:07.087 回答