【问题标题】:Need help to convert PSD to PNG in GraphicsMagick需要帮助在 GraphicsMagick 中将 PSD 转换为 PNG
【发布时间】:2011-09-20 13:00:11
【问题描述】:

我正在尝试使用以下命令在 GraphicsMagick 中将 PSD 转换为 PNG:

#gm convert file.psd -flatten file.png

当 Web 应用程序在临时服务器中时,一切看起来都没有问题。 当我将 Web 应用程序移动到生产服务器时,一些 PSD 文件会收到以下错误消息:

In GraphicsMagick 1.3.12 : gm convert: Too much image data in file.

或者这个:

In GraphicsMagick 1.2.10 : gm convert: Memory allocation failed (unable to allocate cache info) [Cannot allocate memory].

最可笑的部分是它可以在临时服务器上工作,但不能在生产服务器上工作。 暂存服务器是 VMWare 中的 FreeBSD,生产服务器是物理服务器。

我在 Internet 上找到的文档非常少。几个月前这里只有一个线程: http://sourceforge.net/mailarchive/forum.php?thread_name=20110301013714.GC15521%40node99.net&forum_name=graphicsmagick-help

提到同样的问题,但没有回复。

我想知道我是否可以在这里获得帮助。或者我错了,我应该选择 ImageMagick。

【问题讨论】:

  • 他们有相同的架构吗? i386 还是 x86_64? Freebsd 和 GraphicsMagick 在两台服务器上是否相同?两台服务器的内存大小是多少?
  • 我们看到了同样的错误。在我们的例子中,它只发生在 64 位上,而不是 32 位盒子上。 HTH
  • @Nico den Boer,是的,你是对的。我和你有同样的看法。它只发生在 64 位机器上。 GM真的不靠谱。我们搬到了 IM,一切正常。直到今天,我又做了一个测试,GM在64位上还是有bug的。

标签: vmware freebsd psd graphicsmagick


【解决方案1】:

生产服务器的每个进程的内存限制可能低于您的暂存 VM。也就是说,限制可能是由软件而不是实际硬件强加的。

限制可以是每个用户(或者更确切地说是per user-class),也可以是系统范围的(使用 sysctl)。尝试运行

% sysctl -Aa|fgrep kern.max

并比较两台服务器之间的输出(kern.maxdsiz 和 kern.maxssiz 特别感兴趣)。另外,尝试简单地以网络服务器用户身份运行限制:

% su          # become root
% su -m www   # become www
% limits

然后再次比较输出。

最后,您的生产服务器是否只是在使用更多内存(用于其他事情,例如提供其他内容),而暂存系统仅处理单个文件转换,因此没有达到限制?

【讨论】:

  • 您好 Mikhail T,感谢您的帮助。在这种情况下,这是因为 GM 在 64 位上存在问题。对于简单的 PSD 文件,它可以工作,但如果 PSD 文件在 64 位机器上超过 3 个图形层,GM 将无法工作。
  • 前段时间在 FreeBSD 上维护了 GM 端口,我非常尊重作者。我很确定,如果您向他们报告错误,他们会及时修复。
【解决方案2】:

我遇到了这个确切的问题。这似乎是graphicsmagick的限制。如果您使用 -debug all 开关,您将看到 psd 的解码器正在尝试分配比每个进程可用的内存更多的内存。

例如,我有一个 6MB 的 psd,我想将它翻成 jpg。 GM 无法做到这一点,因为它试图一次将其全部充气,并且需要 64GB 的内存(这是在我的开发机器上,只有 8GB)。

我在 imagemagick 上运行了相同的命令,它没有问题(在我的开发机器上)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-24
    • 2019-12-23
    • 2021-11-06
    • 2016-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多