-
Notifications
You must be signed in to change notification settings - Fork 37
/
setProgressMonitor.php
92 lines (72 loc) · 2.62 KB
/
setProgressMonitor.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<?php
namespace ImagickDemo\Imagick;
use ImagickDemo\Imagick\Controls\ImageControl;
use VarMap\VarMap;
class setProgressMonitor extends \ImagickDemo\Example
{
private ImageControl $imageControl;
public function __construct(
VarMap $varMap
) {
$this->imageControl = ImageControl::createFromVarMap($varMap);
}
public static function getParamType(): string
{
return ImageControl::class;
}
public function renderTitle(): string
{
return "Imagick::setProgressMonitor";
}
public function renderDescription()
{
$output = <<< END
The progress monitor allows you to be notified of progress during image processing. It also allows you to abort the image processing, for example if it's taking too long, or it is detected the image is no longer needed.
In the example below, the progress is monitored and then the image operation is cancelled when the progress passed 20%.
Please note the offset and span values are approximate and do not reflect an accurate measure of the image progress.
END;
return nl2br($output);
}
public function render(
?string $activeCategory,
?string $activeExample
)
{
//Example Imagick::setProgressMonitor
$output = "<pre>";
$abortReason = null;
try {
$imagick = new \Imagick(realpath($this->imageControl->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) {
$output .= "Progress: $offset / $span <br/>";
}
return true;
};
$imagick->setProgressMonitor($callback);
$imagick->waveImage(2, 15);
$output .= "Data len is: " . strlen($imagick->getImageBlob());
}
catch (\ImagickException $e) {
if ($abortReason != null) {
$output .= "Image processing was aborted: " . $abortReason . "<br/>";
}
else {
$output .= "ImagickException caught: " . $e->getMessage() . " Exception type is " . get_class($e);
}
}
//Example end
$output .= "</pre>";
return $output;
}
}