2012-06-22 37 views
2

部分包括的功能,如裁剪,調整大小,過濾大量使用的圖像處理,亮度等PHP GD&Imagick - 有沒有什麼方法可以測量圖像操作的進度?我的應用程序的

反正是有衡量GD的進展及/或ImageMajick而圖像處理正在發生?我希望能夠通過以下方式來呈現一個進度條客戶端: -

  1. 詳情約操縱收集客戶端,併發布到服務器
  2. 在POST一個procress條渲染客戶端開始0%。
  3. 服務器運行GD或Imagick並處理圖像,在此期間它將進度更新數據吐出到客戶端。
  4. 使用javascript更改進度欄的進度寬度以反映返回的進度數據。
  5. 最終當圖像操作進程完成時,新文件名被髮送回客戶端並且標籤的src被更新。
  6. 在圖像上檢測到onload事件,最後一次渲染後,進度條達到100%,圖像顯示給用戶。

如果沒有從GD或Imagick中檢索進度數據的可能方法,任何人都可以提出一種「僞造它」的方法嗎?

我已經考慮在POST之前渲染一個空的進度條,一旦操作發生並且客戶端接收到ajax響應,就會將其動畫化爲70%。然後,通過檢測onload事件,一旦新圖像完全加載,最後將動畫設爲100%。

如果這是我唯一的選擇那麼就這樣吧。但對我來說,這感覺相當「笨拙」。

任何想法?

編輯 - 我剛纔看到ImageMajick的命令行版本已經返回進度選項「-monitor」,所以我可能能夠通過查詢此每隔50ms左右敲東西了。是否有類似的GD,因爲我們同時使用GD/Imagick取決於所需的操作。

回答

1

你說的沒錯,在使用ImageMagick與EXEC你可以在後臺添加-monitor選項,運行命令,發送輸出的情況下對文件

convert opts -monitor > /path/to/progress.txt 2>/path/to/progress.txt & 

,然後定期閱讀該文件。

此外,您可以使用Imagick extesnion包裝和設置回調函數與 Imagick::setProgressMonitor。結合HTML5服務器發送的事件,它會很好。

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); 
1

也許您可以使用偵聽器和事件的集合來識別源進度,然後通知客戶端。

您可以使用React或純粹的lib事件來使這個進度異步。

相關問題