34 private $imagick = null;
60 public function load($file) {
62 $this->imagick =
new Imagick($file);
63 $this->image = $this->imagick->getImageFilename();
65 $this->imagick->setImageOrientation(Imagick::ORIENTATION_TOPLEFT);
76 public function save($file, $type =
'', $quality = 100) {
77 if ($type ==
'jpg' || $type ==
'jpeg') {
78 $this->imagick->setImageCompressionQuality($quality);
80 return $this->imagick->writeImages($file,
true);
90 $this->imagick->clear();
102 private function modify($action, $params = array()) {
110 $resize =
function(Imagick &
$image) use ($params) {
111 $image->scaleImage($params[
'width'], $params[
'height'], $params[
'width'] && $params[
'height']);
120 $crop =
function(Imagick &
$image) use ($params) {
121 $image->cropImage($params[
'width'], $params[
'height'], $params[
'x'], $params[
'y']);
122 $image->setImagePage($params[
'width'], $params[
'height'], 0, 0);
131 $rotate =
function(Imagick &
$image) use ($params) {
132 $image->rotateImage(
new ImagickPixel(
'#00000000'), $params[
'deg']);
141 $mirror =
function(Imagick &
$image) use ($params) {
142 if ($params[
'horizontal']) {
145 if ($params[
'vertical']) {
150 if (isset($$action)) {
151 if ($this->imagick->getNumberImages() > 1) {
153 $image = $this->imagick->coalesceImages();
154 foreach (
$image as $frame) {
157 $this->imagick =
$image->optimizeImageLayers();
159 $$action($this->imagick);
162 throw new Exception(
'Invalid modify action.');
176 public function crop($x1, $y1, $x2, $y2) {
177 $this->modify(
'crop', array(
178 'width' => $x2 - $x1,
179 'height' => $y2 - $y1,
193 $this->modify(
'rotate', array(
206 public function mirror($vertical, $horizontal) {
207 $this->modify(
'mirror', array(
208 'vertical' => $vertical,
209 'horizontal' => $horizontal
221 public function resize($width, $height) {
222 $this->modify(
'resize', array(
247 $this->
resize(0, $height);
258 $watermark =
new Imagick($file);
261 $image_w = $this->imagick->getImageWidth();
262 $image_h = $this->imagick->getImageHeight();
263 $watermark_w = $watermark->getImageWidth();
264 $watermark_h = $watermark->getImageHeight();
266 if ($image_w < $watermark_w || $image_h < $watermark_h) {
267 $watermark->scaleImage($image_w, 0);
268 $watermark_w = $watermark->getImageWidth();
269 $watermark_h = $watermark->getImageHeight();
270 if ($image_h < $watermark_h) {
271 $watermark->scaleImage(0, $image_h);
272 $watermark_w = $watermark->getImageWidth();
273 $watermark_h = $watermark->getImageHeight();
277 $x = floor(($image_w - $watermark_w) / 2);
278 $y = floor(($image_h - $watermark_h) / 2);
280 $this->imagick->compositeImage($watermark, Imagick::COMPOSITE_OVER, $x, $y);
291 public function thumbnail($width, $height, $params = []) {
292 $type = $params[
'type'] ??
'png';
294 $this->imagick->setImageFormat($type);
295 $this->imagick->scaleImage($width, $height ? $height : $width,
true);
296 $this->imagick->setImageAlphaChannel(Imagick::VIRTUALPIXELMETHOD_WHITE);
298 $file = tempnam($GLOBALS[
'egotec_conf'][
'bin_dir'] .
'tmp',
'thumbnail');
299 if ($this->
save($file, $type, $params[
'quality'] ?? $GLOBALS[
'egotec_conf'][
'image'][
'quality'] ?? 100)) {
316 $result = $this->imagick->compareImages(
new Imagick($file), Imagick::METRIC_MEANSQUAREERROR);
317 return 'data:' . $result[0]->getImageMimeType() .
';base64,' . base64_encode($result[0]->getImageBlob());
318 }
catch (Exception $e) {
329 return $this->imagick->getImageWidth();
338 return $this->imagick->getImageHeight();
347 $data = @getimagesize($this->image);
348 if (is_array($data)){
376 return $this->imagick->getImageMimeType();
385 public function getExif($entry = self::EXIF_ALL) {
387 function_exists(
'exif_read_data')
388 && ($data = @exif_read_data($this->imagick->getImageFilename())) !== false
393 case self::EXIF_COPYRIGHT:
394 $value = trim($data[
'Copyright'] ?? $data[
'COMPUTED'][
'Copyright'] ?? $data[
'Artist']);
395 if (empty($value) && isset($data[
'COMMENT'])) {
396 if (is_array($data[
'COMMENT'])) {
397 $value = implode($data[
'COMMENT'],
', ');
399 $value = $data[
'COMMENT'];
402 return trim(str_replace(
'©',
'', $value));
save($file, $type='', $quality=100)
thumbnail($width, $height, $params=[])
getExif($entry=self::EXIF_ALL)
mirror($vertical, $horizontal)