【问题标题】:Imagick not enough processor power?Imagick 没有足够的处理器能力?
【发布时间】:2010-10-28 10:12:52
【问题描述】:

我正在尝试使用此配置在 VDS 上裁剪动画 gif:

~800MHz 和 256 内存

而且它不起作用。它只是吃掉内存和处理器,大约一分钟后没有响应。

http://i192.photobucket.com/albums/z228/Somebi/no-responce.jpg

http://imm.io/1OID

在本地机器上,我创建了一个具有 256 RAM 的虚拟机。 一切正常,但我必须承认有点慢...... 但我在本地机器上有 Duo Core 7400。

我已尝试使用以下设置限制 VDS 上的内存使用:

$gif = new Imagick($s['src']);

set_time_limit(0);
$gif->setResourceLimit(Imagick::RESOURCETYPE_MEMORY,32);
$gif->setResourceLimit(Imagick::RESOURCETYPE_MAP,64);

// echo $gif->getResourceLimit(Imagick::RESOURCETYPE_MEMORY);
// echo $gif->getResourceLimit(Imagick::RESOURCETYPE_MAP);
// echo $gif->getResourceLimit(Imagick::RESOURCETYPE_FILE);
// echo $gif->getResourceLimit(Imagick::RESOURCETYPE_DISK);
// echo $gif->getResourceLimit(Imagick::RESOURCETYPE_AREA);
// exit;

$gif = $gif->coalesceImages();

foreach($gif as $frame){
    $frame->cropImage($s['params']['w'], $s['params']['h'], $s['params']['x'], $s['params']['y']);      
    $frame->setImagePage($s['params']['w'], $s['params']['h'], 0, 0);
}   

$gif->writeImages($s['dest_path'] .'/'. $fullname,true);

但是我可以限制处理器的使用吗?

对于慢速 VDS 有什么解决方案吗? :|

谢谢大家!

更新:

   print_r(getimagesize($s['src']));
   exit;

   $gif = new Imagick($s['src']);
   etc...

    Array
(
    [0] => 530
    [1] => 150
    [2] => 1
    [3] => width="530" height="150"
    [bits] => 8
    [channels] => 3
    [mime] => image/gif
)

更新2:

pathinfo($s['src'])

(
    [dirname] => images/tmp
    [basename] => 43138a0723d6ae0799564bd6acb8c7b83c8df483.gif
    [extension] => gif
    [filename] => 43138a0723d6ae0799564bd6acb8c7b83c8df483
)

更新3: 如何调试 imagick 扩展? :(

找到了这个包: http://fr2.rpmfind.net/linux/RPM/fedora/updates/testing/13/i386/debug/php-pecl-imagick-debuginfo-3.0.0-5.fc13.i686.html

有人试过吗?

【问题讨论】:

  • $s['src'] 包含什么内容?
  • 当我删除限制时,我收到错误标题“NetworkError: 500 Internal Server Error after a minute or more.
  • $s['src'] 包含上传的 gif
  • @Beck 上传的 GIF 是什么意思。原始数据、文件路径还是 URL?
  • safe_mode Off Off(来自 phpinfo 页面)

标签: php imagemagick imagick


【解决方案1】:

你可以增加 php 的最大执行时间,我相信它默认为 60 秒。

在运行时使用set_time_limit,或使用max_execution_time 进行ini 配置。

好的,从头开始,我看到你已经这样做了。呵呵!

【讨论】:

    【解决方案2】:

    我将推测$s['src'] 包含一个远程 URL。

    这可能意味着您真正的麻烦在于获取远程图像。防火墙或其他东西可能会导致脚本超时。

    请先尝试使用本地图像。我敢打赌,它会很好用。在这种情况下,尝试使用file_get_contents() 来获取远程文件。我想我在某处读到了 IMagick 的构造函数在 URL 方面存在问题。

    【讨论】:

    • @Beck 好吧,那不是它!我欠你半杯啤酒:)
    【解决方案3】:

    尝试在命令行上运行你的 php 脚本,看看它是否与执行时间有关。

    shell> php <your-script-name>
    

    如果php 不在您的PATH 环境变量中,您可能需要替换它的完整路径。

    请记住,ImageMagick 已针对质量进行了优化;不是为了速度。有一个类似的库,叫做GraphicsMagick,(他们说)运行良好,资源很少。如果您仍然遇到资源问题,您可以考虑尝试一下。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-05
      • 2011-02-09
      • 2014-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      相关资源
      最近更新 更多