From 5e12c36fd8c5b400391d74d877c09595dfd259ea Mon Sep 17 00:00:00 2001 From: Andrew Bagshaw Date: Sat, 13 Aug 2016 22:45:34 -0700 Subject: [PATCH] Fix EXIF Image Orientation Issues This small fix resolves issues where a user will upload an image taken on a device that sets the "Orientation" tag in the EXIF metadata or rotated using another tool on the desktop and that orientation information will be ignored. --- bl-kernel/helpers/image.class.php | 37 +++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/bl-kernel/helpers/image.class.php b/bl-kernel/helpers/image.class.php index db70ae74..e139b4fb 100644 --- a/bl-kernel/helpers/image.class.php +++ b/bl-kernel/helpers/image.class.php @@ -12,12 +12,49 @@ class Image { // *** Open up the file $this->image = $this->openImage($fileName); + // *** Fix issues with orientation being set in metadata + $this->fixOrientation($fileName); + // *** Get width and height $this->width = imagesx($this->image); $this->height = imagesy($this->image); $this->resizeImage($newWidth, $newHeight, $option); } + + private function fixOrientation($filename) { + $exif = exif_read_data($filename); + + if (!empty($exif['Orientation'])) { + switch ($exif['Orientation']) { + case 1: + break; + case 2: + $this->image = imageflip($this->image, IMG_FLIP_HORIZONTAL); + break; + case 3: + $this->image = imagerotate($this->image, 180, 0); + break; + case 4: + $this->image = imageflip($this->image, IMG_FLIP_VERTICAL); + break; + case 5: + $this->image = imageflip($this->image, IMG_FLIP_VERTICAL); + $this->image = imagerotate($this->image, -90, 0); + break; + case 6: + $this->image = imagerotate($this->image, -90, 0); + break; + case 7: + $this->image = imageflip($this->image, IMG_FLIP_HORIZONTAL); + $this->image = imagerotate($this->image, -90, 0); + break; + case 8: + $this->image = imagerotate($this->image, 90, 0); + break; + } + } + } public function saveImage($savePath, $imageQuality="100", $forceJPG=false, $forcePNG=false) {