X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=include%2FPhoto.php;h=8e4eb84bdba8cc6e0f6b1445edf12bd7b3946678;hb=4b8f3a4194b8fbec19e8a085fcd16e9369fbfcd2;hp=74d4c746d6f89eefbd05f4326f95d18be8e03d99;hpb=9ecb9842858541db669e6ee61627e8526bf4c719;p=friendica.git diff --git a/include/Photo.php b/include/Photo.php index 74d4c746d6..8e4eb84bdb 100644 --- a/include/Photo.php +++ b/include/Photo.php @@ -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)