【问题标题】:Error running ImageMagick from R: Invalid parameter从 R 运行 ImageMagick 时出错:参数无效
【发布时间】:2013-04-24 23:49:42
【问题描述】:

我正在尝试在 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)。在i am linking to earlier 网站的cmets 中,建议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 服务包 1, R 3.0.0

提前谢谢...

【问题讨论】:

  • 您引用的错误消息并不表示 R 没有找到 convert... 当您使用完整路径时会收到什么错误消息?一种可能性是您的PATH 中有另一个convert 程序。如果您将目录添加到 PATH 环境变量的末尾,请尝试将其放在开头。
  • system("where convert", intern = TRUE) 带给你什么?
  • convert 变量中的第一个文件路径是 ImageMagick 文件路径,刚刚再次检查。当我运行代码system("C:/Program Files/ImageMagick-6.8.5-Q16/convert -delay 80 *.png example_1.gif") 时,显然没有任何反应。当我运行 'shell("C:/Program Files/ImageMagick-6.8.5-Q16/convert -delay 80 *.png example_1.gif")' 时,我收到错误消息:'C:/Program' was not recognized as an internal or external command, program or batch file.,然后是一系列 R -错误。
  • 您建议的代码给出以下结果:> system("where convert", intern = TRUE) [1] "C:\\Program Files\\ImageMagick-6.8.5-Q16\\convert.exe" [2] "C:\\Windows\\System32\\convert.exe" 非常感谢您的帮助...非常感谢。
  • 那么可能是system('"C:\\Program Files\\ImageMagick-6.8.5-Q16\\convert.exe" -delay 80 *.png example_1.gif', intern = TRUE)

标签: r shell animation imagemagick system


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    在 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')
    

    【讨论】:

    • 实际上自从这个答案以来,magick 中的命令发生了变化,以避免与 sytem32 发生冲突。只需使用:system (magick convert -delay 40 -loop 0 *.png example_1.gif") 如果您的目标位于不是您的工作目录系统的文件夹中,请不要忘记在 cd 中指定您的路径(“cd YOUR PATH ")
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      我是 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,它将遍历图像一次

      *.[图像类型]=和.[图像类型]的文件

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

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

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

      在此之前我使用 -延迟 = 80 而不是 -设置延迟 80 在cmd中出现错误: 转换:选项“-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 - Issue with Windows and convert function

      【讨论】:

        猜你喜欢
        • 2017-06-03
        • 2016-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-13
        • 2019-04-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多