(PECL imagick 3 >= 3.3.0)
Imagick::setProgressMonitor — 設定處理期間要呼叫的回呼函式
callback
要呼叫的進度函式。如果影像處理應該繼續,則應該回傳 true,如果應該取消,則應該回傳 false。offset 參數表示進度,而 span 參數表示需要完成的總工作量。
傳遞給回呼函式的值不一致。特別是 span 參數可以在影像處理期間增加。因此,計算影像操作的完成百分比並非易事。
成功時回傳 true
。
範例 #1 Imagick::setProgressMonitor()
<?php
$abortReason = null;
try {
$imagick = new \Imagick(realpath($this->control->getImagePath()));
$startTime = time();
$callback = function ($offset, $span) use ($startTime, &$abortReason) {
if (((100 * $offset) / $span) > 20) {
$abortReason = "處理進度達到 20%";
return false;
}
$nowTime = time();
if ($nowTime - $startTime > 5) {
$abortReason = "影像處理時間超過 5 秒";
return false;
}
if (($offset % 5) == 0) {
echo "進度:$offset / $span <br/>";
}
return true;
};
$imagick->setProgressMonitor($callback);
$imagick->waveImage(2, 15);
echo "資料長度為:".strlen($imagick->getImageBlob());
}
catch(\ImagickException $e) {
if ($abortReason != null) {
echo "影像處理已中止:".$abortReason."<br/>";
}
else {
echo "已捕獲 ImagickException:".$e->getMessage()." 例外類型為 ".get_class($e);
}
}
?>