【问题标题】:Error running 'montage' function in ImageMagick 'too many arguments'?在 ImageMagick 的“参数太多”中运行“蒙太奇”函数时出错?
【发布时间】:2023-03-13 14:15:02
【问题描述】:

我正在尝试通过 ruby​​ 脚本直接在 ImageMagick 中使用大量参数 (264) 运行 montage 函数。这是调用函数的行:

montage -mode concatenate -tile #{x_tiles}x#{y_tiles} #{tempfiles.map{|t| t.path}.join(' ')} #{final_filename}.jpg

这适用于较少数量的参数(例如 10),但是当我尝试以较大数量(230~)运行它时,我收到以下错误:

Argument list too long {所有参数列表} (Errno: :E2BIG).

我使用的是 Windows,所以我尝试了 PowerShell 和 CMD,得到了同样的错误。

有没有办法在用 ruby​​ 或其他方式(例如通过通配符)编辑命令时克服这个问题? 我尝试更改here 中提到的文件结尾,但语法不正确。

【问题讨论】:

  • 可能是操作系统命令的文本行中的字符数限制。检查 Windows 的字符串行长度限制。对不起,我不是 Windows 用户,所以不能告诉你这些信息。但这是一个典型的问题。有一次我认为 Windows 有 256 个字符的限制。见docs.microsoft.com/en-us/windows/desktop/fileio/…。似乎有一种方法可以使用扩展字符长度。
  • 感谢您的回复。我怀疑情况也是如此,因为代码在其他方面很健壮。我将尝试在 Linux 上运行它,看看是否能解决问题

标签: ruby imagemagick imagemagick-montage


【解决方案1】:

要做的一件事是在运行命令字符串之前检查它的长度。 如果它太长,对于你所在的系统,你可能需要把它分解成更小的块。

根据Microsoft Support,在不知道你跑步的长度的情况下

在运行 Microsoft Windows XP 或更高版本的计算机上,您可以在命令提示符处使用的最大字符串长度为 8191 个字符。在运行 Microsoft Windows 2000 或 Windows NT 4.0 的计算机上,您可以在命令提示符处使用的最大字符串长度为 2047 个字符。

Linux 对命令的长度也有限制。见"Argument list too long": Beyond Arguments and Limitations

在 Linux 上,您可以重新编译内核以增加页面大小,但在 Windows 上,您没有这样的选择。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-22
  • 1970-01-01
  • 2017-12-05
  • 1970-01-01
相关资源
最近更新 更多