我的应用程序的一部分包括大量使用图像处理功能,例如裁剪,调整大小,滤镜,亮度等。
在进行图像处理时,是否还要测量GD和/或ImageMajick的进度?我希望能够以下列方式呈现进度条客户端: -
如果没有可能从GD或Imagick中检索进度数据的方法,有人会建议某种方式“假装”吗?
我考虑在POST之前渲染一个空的进度条,一旦操作发生并且客户端收到ajax响应,它就会将其设置为70%。然后通过检测onload事件,一旦新图像完全加载,最后动画为100%。
如果这是我唯一的选择,那就这样吧。但对我来说感觉相当'笨重'。
有什么想法吗?
编辑 - 我刚刚看到ImageMajick的命令行版本有'-monitor'选项可以返回进度,所以我可以通过每隔50ms轮询一次来解决问题所以。是否有任何类似的GD,因为我们使用GD / Imagick取决于所需的操作。
答案 0 :(得分:1)
也许您可以使用一组侦听器和事件来识别源进度,然后通知客户端。
您可以使用React或纯lib事件来使此进程异步。
答案 1 :(得分:1)
你是对的,如果在exec中使用ImageMagick,你可以添加-monitor
选项,在后台运行命令并将输出发送到文件
convert opts -monitor > /path/to/progress.txt 2>/path/to/progress.txt &
然后定期读取该文件。
此外,您可以使用Imagick
extesnion包装器并设置回调函数
Imagick::setProgressMonitor
。结合HTML5 Server-Sent Events,它会很不错。
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
$callback = function($offset, $span){
echo "data: ".(100 * $offset) / $span."\n\n";
flush();
return true;
}
$imagick->setProgressMonitor($callback);
$imagick->waveImage(2, 15);