diff options
author | Lukas Reschke <lukas@statuscode.ch> | 2016-10-27 08:56:56 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-10-27 08:56:56 +0200 |
commit | 7cae758ef9fc2963fa8889dc448e54c1e2d1e71a (patch) | |
tree | 2c44e2c8fc47edfef110baf0cb6dfa4ab60fece8 | |
parent | 9984eba7278685d5bb0017e971751af4130aa875 (diff) | |
parent | b05fe45d520a8df309897626ad109a4daf64ed83 (diff) | |
download | nextcloud-server-7cae758ef9fc2963fa8889dc448e54c1e2d1e71a.tar.gz nextcloud-server-7cae758ef9fc2963fa8889dc448e54c1e2d1e71a.zip |
Merge pull request #1930 from nextcloud/fix_avatars_exif
Fix avatar on exif rotated images
-rw-r--r-- | core/Controller/AvatarController.php | 1 | ||||
-rw-r--r-- | lib/private/legacy/image.php | 27 |
2 files changed, 28 insertions, 0 deletions
diff --git a/core/Controller/AvatarController.php b/core/Controller/AvatarController.php index c6f320dd0fe..5e3d563cf2c 100644 --- a/core/Controller/AvatarController.php +++ b/core/Controller/AvatarController.php @@ -237,6 +237,7 @@ class AvatarController extends Controller { try { $image = new \OC_Image(); $image->loadFromData($content); + $image->readExif($content); $image->fixOrientation(); if ($image->valid()) { diff --git a/lib/private/legacy/image.php b/lib/private/legacy/image.php index fee1a805c40..5403cccd026 100644 --- a/lib/private/legacy/image.php +++ b/lib/private/legacy/image.php @@ -54,6 +54,8 @@ class OC_Image implements \OCP\IImage { private $fileInfo; /** @var \OCP\ILogger */ private $logger; + /** @var array */ + private $exif; /** * Get mime type for an image file. @@ -347,6 +349,10 @@ class OC_Image implements \OCP\IImage { * @return int The orientation or -1 if no EXIF data is available. */ public function getOrientation() { + if ($this->exif !== null) { + return $this->exif['Orientation']; + } + if ($this->imageType !== IMAGETYPE_JPEG) { $this->logger->debug('OC_Image->fixOrientation() Image is not a JPEG.', array('app' => 'core')); return -1; @@ -370,9 +376,30 @@ class OC_Image implements \OCP\IImage { if (!isset($exif['Orientation'])) { return -1; } + $this->exif = $exif; return $exif['Orientation']; } + public function readExif($data) { + if (!is_callable('exif_read_data')) { + $this->logger->debug('OC_Image->fixOrientation() Exif module not enabled.', array('app' => 'core')); + return; + } + if (!$this->valid()) { + $this->logger->debug('OC_Image->fixOrientation() No image loaded.', array('app' => 'core')); + return; + } + + $exif = @exif_read_data('data://image/jpeg;base64,' . base64_encode($data)); + if (!$exif) { + return; + } + if (!isset($exif['Orientation'])) { + return; + } + $this->exif = $exif; + } + /** * (I'm open for suggestions on better method name ;) * Fixes orientation based on EXIF data. |