我正试图通过以下方式在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()
如果我删除缩略图选项,该命令在Web服务器上执行得很好,但它不会调整任何大小。所以我想这不是权限或设置的问题。
PHP版本为5.2.17
。ImageMagick版本为:6.6.0-4 2012-04-26
有人遇到过类似的问题,可以帮我解决吗?
好的,我终于把它修好了。将stderr重定向到一个文件后,我发现以下错误:
libgomp: Thread creation failed: Resource temporarily unavailable
似乎我的旅馆1&1最近升级了ImageMagick版本,它显然比旧版本使用了更多的内存(至少主机管理员是这么说的)。他们建议限制ImageMagick:创建的线程数
putenv('MAGICK_THREAD_LIMIT=1');
我把这段代码放进了我的init脚本中,现在它运行得很好!
您正在转换为PNG,但您正在设置-quality 90
(似乎只是类似于JPEG质量设置)。
然而,对于PNG输出,-quality
设置与JPEG的质量设置(只是从0
到100
的整数)非常不同。
对于PNG,它由两个个个位数组成:
-
第一位(十位)是(很大程度上)zlib压缩级别,它可能从
0
变为9
(然而,0
的设置有一个特殊的含义:当你使用它时,你会得到霍夫曼压缩,而不是zlib压缩级别0。这通常更好。。。奇怪但真实。) -
第二位是PNG数据编码过滤器类型(在压缩之前):
- 0为零
- 1是"sub"
- 2为"向上"
- 3为"平均"
- 4是"Paeth",并且
- 5表示"自适应"
实际上,这意味着:
- 对于具有纯色序列的插图,"无"滤镜(
-quality 00
)通常是最合适的 - 对于自然景观的照片,"自适应"过滤(
-quality 05
)通常是最好的
也许你想根据这些信息重新访问你的-quality 90
设置。
也许你已经意识到了。在这种情况下:我为"向唱诗班说教"道歉。:-)