2011-09-20 37 views
0

我尝试使用下面的命令PSD转换成PNG在GraphicsMagick工具:当Web应用程序是在脚手架服务器需要帮助PSD转换成PNG在GraphicsMagick工具

#gm convert file.psd -flatten file.png 

一切看起来都没有问题。 当我移动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,生产服务器是物理服务器。

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

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

我想知道如果我能在这里得到帮助。或者,也许我错了,我应该选择ImageMagick。

+0

他们有相同的架构(我的机器上)? i386还是x86_64?两台服务器上的Freebsd和GraphicsMagick都一样吗?两台服务器的内存大小是多少? –

+0

我们看到了同样的错误。在我们的情况下,它只发生在64位,而不是在32位的盒子上。 HTH – 2012-01-26 12:40:58

+0

@Nico den Boer,是的,你是对的。我与你分享相同的意见。它只发生在64位机器上。通用汽车真的不可靠。我们转移到即时消息,并且一切正常。直到今天,我又做了一次测试,通用仍然是64位的bug。 –

回答

0

很可能生产服务器的每进程内存限制比分段虚拟机低。也就是说,限制可能是由软件强加的,而不是实际的硬件。

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

% sysctl -Aa|fgrep kern.max 

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

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

并再次比较输出。

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

+0

嗨米哈伊尔T,谢谢你的帮助。在这种情况下,这是因为GM在64位上有问题。对于简单的PSD文件,它可以工作,但如果PSD文件在64位计算机上超过3个图形层,通用将无法工作。 –

+0

前段时间,我在FreeBSD上维护了GM端口,对作者有一个健康的尊重。我很确定,如果你向他们报告错误,他们会立即修复它。 –

0

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

例如,我有一个6MB的psd,我想用拇指指向一个jpg。通用汽车公司无法做到这一点,因为它试图一次充满它,并需要64GB的内存(这是在我的开发机器上,只有8GB)。

我跑ImageMagick的相同的命令和它的工作没有问题