我正在尝试通过以下方式在PHP中转换png图像:
exec($cmd, $output, $return_code);
其中$ cmd包含以下代码行:
/usr/bin/convert 'images/original/Id1741.png' -thumbnail x200 -quality '90' './cache/a3b84c5931d9619d12a9e244a310cb17_h200.png'
在命令行上调用此代码非常正常,但在Web服务器上执行它会给出以下错误消息:
Tried to execute : convert 'images/original/Id1741.png' -thumbnail x200 -quality '90' './cache/a3b84c5931d9619d12a9e244a310cb17_h200.png', return code: 1, output: Array()
如果我删除缩略图选项,该命令在网络服务器上执行得很好,但显然它不会调整任何大小。因此,我认为这不是权限或设置的问题。
PHP版本为5.2.17
。
ImageMagick版本是:6.6.0-4 2012-04-26
任何人都有类似的问题,可以帮我解决这个问题吗?
答案 0 :(得分:2)
好的,我终于修好了。将stderr重定向到文件后,我发现以下错误:
libgomp: Thread creation failed: Resource temporarily unavailable
似乎我的主机1& 1最近升级了ImageMagick版本,显然使用的内存比旧版本更多(至少这是主机所说的)。 他们建议限制ImageMagick创建的线程数:
putenv('MAGICK_THREAD_LIMIT=1');
我把这段代码放到我的init脚本中,现在它工作得很好!
答案 1 :(得分:1)
您正在转换为PNG,但您正在设置-quality 90
(似乎只是模仿 JPEG 质量设置)。
但是,对于PNG输出,-quality
设置与JPEG的质量设置(仅为0
到100
之间的整数)非常不同。
对于PNG,它由两位数字组成:
第一个数字(十位)(很大程度上)是zlib压缩级别,它可能会从0
变为9
。
(但0
的设置有一个特殊含义:当你使用它时,你会得到Huffman压缩,而不是zlib压缩等级0.这通常更好......很奇怪,但是真的。)
第二个数字是 PNG数据编码过滤器类型(在压缩之前):
实际上意味着:
-quality 00
)通常是最合适的。-quality 05
)通常是最好的。也许您想根据这些信息重新审视您的-quality 90
设置。
也许你已经意识到了这一点。在这种情况下:我为“向合唱团讲道”道歉。 : - )