(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 = "Processing reached 20%";
return false;
}
$nowTime = time();
if ($nowTime - $startTime > 5) {
$abortReason = "Image processing took more than 5 seconds";
return false;
}
if (($offset % 5) == 0) {
echo "Progress: $offset / $span <br/>";
}
return true;
};
$imagick->setProgressMonitor($callback);
$imagick->waveImage(2, 15);
echo "Data len is: ".strlen($imagick->getImageBlob());
}
catch(\ImagickException $e) {
if ($abortReason != null) {
echo "Image processing was aborted: ".$abortReason."<br/>";
}
else {
echo "ImagickException caught: ".$e->getMessage()." Exception type is ".get_class($e);
}
}
?>