aboutsummaryrefslogtreecommitdiffstats
path: root/include/photo/photo_imagick.php
diff options
context:
space:
mode:
authorKlaus Weidenbach <Klaus.Weidenbach@gmx.net>2019-02-05 23:03:03 +0100
committerKlaus Weidenbach <Klaus.Weidenbach@gmx.net>2019-02-14 22:06:42 +0100
commite6dadb215e9e08491ae57ab851960a0973d3f704 (patch)
treee24ac9e2a5037e23bbd5e97672ed55db21bbf399 /include/photo/photo_imagick.php
parentd70bba28065fb3105543ef40d91f6db839d35e0f (diff)
downloadvolse-hubzilla-e6dadb215e9e08491ae57ab851960a0973d3f704.tar.gz
volse-hubzilla-e6dadb215e9e08491ae57ab851960a0973d3f704.tar.bz2
volse-hubzilla-e6dadb215e9e08491ae57ab851960a0973d3f704.zip
Refactor photo_driver to use namespaces.
Add simple UnitTest, but it is not yet very meaningful.
Diffstat (limited to 'include/photo/photo_imagick.php')
-rw-r--r--include/photo/photo_imagick.php213
1 files changed, 0 insertions, 213 deletions
diff --git a/include/photo/photo_imagick.php b/include/photo/photo_imagick.php
deleted file mode 100644
index cb3ad27fb..000000000
--- a/include/photo/photo_imagick.php
+++ /dev/null
@@ -1,213 +0,0 @@
-<?php /** @file */
-
-
-require_once('include/photo/photo_driver.php');
-
-
-class photo_imagick extends photo_driver {
-
-
- function supportedTypes() {
- return array(
- 'image/jpeg' => 'jpg',
- 'image/png' => 'png',
- 'image/gif' => 'gif'
- );
- }
-
- public function get_FormatsMap() {
- return array(
- 'image/jpeg' => 'JPG',
- 'image/png' => 'PNG',
- 'image/gif' => 'GIF'
- );
- }
-
-
- function load($data, $type) {
- $this->valid = false;
- $this->image = new Imagick();
-
- if(! $data)
- return;
-
- try {
- $this->image->readImageBlob($data);
- }
- catch (Exception $e) {
- logger('imagick readImageBlob() exception:' . print_r($e,true));
- return;
- }
-
- /**
- * Setup the image to the format it will be saved to
- */
-
- $map = $this->get_FormatsMap();
- $format = $map[$type];
-
- if($this->image) {
- $this->image->setFormat($format);
-
- // Always coalesce, if it is not a multi-frame image it won't hurt anyway
- $this->image = $this->image->coalesceImages();
-
-
- $this->valid = true;
- $this->setDimensions();
-
- /**
- * setup the compression here, so we'll do it only once
- */
- switch($this->getType()) {
- case "image/png":
- $quality = get_config('system','png_quality');
- if((! $quality) || ($quality > 9))
- $quality = PNG_QUALITY;
- /**
- * From http://www.imagemagick.org/script/command-line-options.php#quality:
- *
- * 'For the MNG and PNG image formats, the quality value sets
- * the zlib compression level (quality / 10) and filter-type (quality % 10).
- * The default PNG "quality" is 75, which means compression level 7 with adaptive PNG filtering,
- * unless the image has a color map, in which case it means compression level 7 with no PNG filtering'
- */
- $quality = $quality * 10;
- $this->image->setCompressionQuality($quality);
- break;
- case "image/jpeg":
- $quality = get_config('system','jpeg_quality');
- if((! $quality) || ($quality > 100))
- $quality = JPEG_QUALITY;
- $this->image->setCompressionQuality($quality);
- default:
- break;
-
- }
- }
- }
-
- public function destroy() {
- if($this->is_valid()) {
- $this->image->clear();
- $this->image->destroy();
- }
- }
-
-
- public function setDimensions() {
- $this->width = $this->image->getImageWidth();
- $this->height = $this->image->getImageHeight();
- }
-
-
- public function clearexif() {
-
- $profiles = $this->image->getImageProfiles("icc", true);
-
- $this->image->stripImage();
-
- if(!empty($profiles)) {
- $this->image->profileImage("icc", $profiles['icc']);
- }
- }
-
-
-
- public function getImage() {
- if(!$this->is_valid())
- return FALSE;
-
- $this->image = $this->image->deconstructImages();
- return $this->image;
- }
-
- public function doScaleImage($dest_width,$dest_height) {
-
- /**
- * If it is not animated, there will be only one iteration here,
- * so don't bother checking
- */
- // Don't forget to go back to the first frame
- $this->image->setFirstIterator();
- do {
- $this->image->scaleImage($dest_width, $dest_height);
- } while ($this->image->nextImage());
-
- $this->setDimensions();
- }
-
- public function rotate($degrees) {
- if(!$this->is_valid())
- return FALSE;
-
- $this->image->setFirstIterator();
- do {
- // ImageMagick rotates in the opposite direction of imagerotate()
- $this->image->rotateImage(new ImagickPixel(), -$degrees);
- } while ($this->image->nextImage());
-
- $this->setDimensions();
- }
-
- public function flip($horiz = true, $vert = false) {
- if(!$this->is_valid())
- return FALSE;
-
- $this->image->setFirstIterator();
- do {
- if($horiz) $this->image->flipImage();
- if($vert) $this->image->flopImage();
- } while ($this->image->nextImage());
-
- $this->setDimensions(); // Shouldn't really be necessary
- }
-
- public function cropImage($max,$x,$y,$w,$h) {
- if(!$this->is_valid())
- return FALSE;
-
- $this->image->setFirstIterator();
- do {
- $this->image->cropImage($w, $h, $x, $y);
- /**
- * We need to remove the canvas,
- * or the image is not resized to the crop:
- * http://php.net/manual/en/imagick.cropimage.php#97232
- */
- $this->image->setImagePage(0, 0, 0, 0);
- } while ($this->image->nextImage());
-
- $this->doScaleImage($max,$max);
- }
-
- public function cropImageRect($maxx,$maxy,$x,$y,$w,$h) {
- if(!$this->is_valid())
- return FALSE;
-
- $this->image->setFirstIterator();
- do {
- $this->image->cropImage($w, $h, $x, $y);
- /**
- * We need to remove the canvas,
- * or the image is not resized to the crop:
- * http://php.net/manual/en/imagick.cropimage.php#97232
- */
- $this->image->setImagePage(0, 0, 0, 0);
- } while ($this->image->nextImage());
-
- $this->doScaleImage($maxx,$maxy);
- }
-
- public function imageString() {
- if(!$this->is_valid())
- return FALSE;
-
- /* Clean it */
- $this->image = $this->image->deconstructImages();
- return $this->image->getImagesBlob();
- }
-
-
-
-}