我正尝试使用以下配置在VDS上裁剪动画gif:
~800MHz和256 RAM
它不起作用。它只是吃了内存和处理器,并在一分钟后没有响应。
http://i192.photobucket.com/albums/z228/Somebi/no-responce.jpg
在本地机器上我创建了一个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
)
UPDATE2:
pathinfo($s['src'])
(
[dirname] => images/tmp
[basename] => 43138a0723d6ae0799564bd6acb8c7b83c8df483.gif
[extension] => gif
[filename] => 43138a0723d6ae0799564bd6acb8c7b83c8df483
)
UPDATE3: 如何调试imagick扩展? :(
有人试过吗?
答案 0 :(得分:0)
你可以增加php的最长执行时间,我相信它默认为60秒。
在运行时使用set_time_limit,或使用max_execution_time进行ini配置。
好吧,从头开始,我看到你已经在做了。卫生署!答案 1 :(得分:0)
我将推测$s['src']
包含一个远程网址。
这可能意味着您真正的麻烦就是获取远程图像。防火墙或其他可能导致脚本超时。
首先尝试使用本地图像。我敢打赌,啤酒可以正常工作。在这种情况下,请尝试使用file_get_contents()
来获取远程文件。我想我读过IMagick的构造函数在URL上遇到问题的地方。
答案 2 :(得分:0)
尝试在命令行上运行php脚本,看看它是否与执行时间有关。
shell> php <your-script-name>
如果php
环境变量中没有PATH
,则可能必须将完整路径替换为{{1}}。
请记住,ImageMagick针对质量进行了优化;不是为了速度。有一个名为GraphicsMagick的类似库,他们说这些库运行良好,资源很少。如果您仍然遇到资源问题,可以考虑尝试。