使用exec调整图像大小并在PHP中转换

时间:2012-08-23 12:09:42

标签: php imagemagick

我正在尝试通过以下方式在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

任何人都有类似的问题,可以帮我解决这个问题吗?

2 个答案:

答案 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的质量设置(仅为0100之间的整数)非常不同。

对于PNG,它由两位数字组成:

  • 第一个数字(十位)(很大程度上)是zlib压缩级别,它可能会从0变为9
    (但0的设置有一个特殊含义:当你使用它时,你会得到Huffman压缩,而不是zlib压缩等级0.这通常更好......很奇怪,但是真的。)

  • 第二个数字是 PNG数据编码过滤器类型(在压缩之前):

    • 0是无,
    • 1是“sub”,
    • 2是“up”,
    • 3是“平均”,
    • 4是“Paeth”,
    • 5是“自适应”。

实际上意味着:

  • 对于具有固定颜色序列的插图,“无”过滤器(-quality 00)通常是最合适的。
  • 对于自然景观的照片,“自适应”过滤(-quality 05)通常是最好的。

也许您想根据这些信息重新审视您的-quality 90设置。

也许你已经意识到了这一点。在这种情况下:我为“向合唱团讲道”道歉。 : - )