]> git.mxchange.org Git - friendica.git/blobdiff - include/Photo.php
Friendicaland
[friendica.git] / include / Photo.php
index 74d4c746d6f89eefbd05f4326f95d18be8e03d99..8e4eb84bdba8cc6e0f6b1445edf12bd7b3946678 100644 (file)
@@ -46,9 +46,52 @@ class Photo {
         }
         $this->type = $type;
 
-        if($this->is_imagick()) {
-            $this->image = new Imagick();
-            $this->image->readImageBlob($data);
+        if($this->is_imagick() && $this->load_data($data)) {
+                       return true;
+               } else {
+                       // Failed to load with Imagick, fallback
+                       $this->imagick = false;
+               }
+               return $this->load_data($data);
+    }
+
+    public function __destruct() {
+        if($this->image) {
+            if($this->is_imagick()) {
+                $this->image->clear();
+                $this->image->destroy();
+                return;
+            }
+            imagedestroy($this->image);
+        }
+    }
+
+    public function is_imagick() {
+        return $this->imagick;
+    }
+
+    /**
+     * Maps Mime types to Imagick formats
+     */
+    public function get_FormatsMap() {
+        $m = array(
+            'image/jpeg' => 'JPG',
+            'image/png' => 'PNG',
+            'image/gif' => 'GIF'
+        );
+        return $m;
+    }
+
+    private function load_data($data) {
+               if($this->is_imagick()) {
+                       $this->image = new Imagick();
+            try {
+                               $this->image->readImageBlob($data);
+                       }
+                       catch (Exception $e) {
+                               // Imagick couldn't use the data
+                               return false;
+                       }
 
             /**
              * Setup the image to the format it will be saved to
@@ -85,45 +128,28 @@ class Photo {
                         $quality = JPEG_QUALITY;
                     $this->image->setCompressionQuality($quality);
             }
-        } else {
-            $this->valid = false;
-            $this->image = @imagecreatefromstring($data);
-            if($this->image !== FALSE) {
-                $this->width  = imagesx($this->image);
-                $this->height = imagesy($this->image);
-                $this->valid  = true;
-                imagealphablending($this->image, false);
-                imagesavealpha($this->image, true);
-            }
-        }
-    }
 
-    public function __destruct() {
-        if($this->image) {
-            if($this->is_imagick()) {
-                $this->image->clear();
-                $this->image->destroy();
-                return;
-            }
-            imagedestroy($this->image);
-        }
-    }
+            $this->width  = $this->image->getImageWidth();
+                       $this->height = $this->image->getImageHeight();
+                       $this->valid  = true;
 
-    public function is_imagick() {
-        return $this->imagick;
-    }
+            return true;
+               }
 
-    /**
-     * Maps Mime types to Imagick formats
-     */
-    public function get_FormatsMap() {
-        $m = array(
-            'image/jpeg' => 'JPG',
-            'image/png' => 'PNG',
-            'image/gif' => 'GIF'
-        );
-        return $m;
-    }
+               $this->valid = false;
+               $this->image = @imagecreatefromstring($data);
+               if($this->image !== FALSE) {
+                       $this->width  = imagesx($this->image);
+                       $this->height = imagesy($this->image);
+                       $this->valid  = true;
+                       imagealphablending($this->image, false);
+                       imagesavealpha($this->image, true);
+
+                       return true;
+               }
+               
+               return false;
+       }
 
     public function is_valid() {
         if($this->is_imagick())
@@ -295,7 +321,11 @@ class Photo {
         if( (! function_exists('exif_read_data')) || ($this->getType() !== 'image/jpeg') )
             return;
 
-        $exif = exif_read_data($filename);
+        $exif = @exif_read_data($filename);
+
+               if(! $exif)
+                       return;
+
         $ort = $exif['Orientation'];
 
         switch($ort)