From 76775d58c8c764ea18de0da157e47eabf9516ffd Mon Sep 17 00:00:00 2001 From: Zeokat Date: Wed, 10 May 2017 21:23:08 +0200 Subject: [PATCH] Support PNG avatars with transparent backgrounds and fix EXIF rotation (#1168) As `orientate` requires the EXIF extension, we can only call it if the extension is installed. Fixes #1161 and #1163. --- .../core/src/Core/Command/RegisterUserHandler.php | 2 +- .../core/src/Core/Command/UploadAvatarHandler.php | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/framework/core/src/Core/Command/RegisterUserHandler.php b/framework/core/src/Core/Command/RegisterUserHandler.php index 9d7a120c1..c7daf38fa 100644 --- a/framework/core/src/Core/Command/RegisterUserHandler.php +++ b/framework/core/src/Core/Command/RegisterUserHandler.php @@ -173,7 +173,7 @@ class RegisterUserHandler 'target' => $this->uploadDir, ]); - $uploadName = Str::lower(Str::quickRandom()).'.jpg'; + $uploadName = Str::lower(Str::quickRandom()).'.png'; $user->changeAvatarPath($uploadName); diff --git a/framework/core/src/Core/Command/UploadAvatarHandler.php b/framework/core/src/Core/Command/UploadAvatarHandler.php index e0fed57d1..de451a074 100644 --- a/framework/core/src/Core/Command/UploadAvatarHandler.php +++ b/framework/core/src/Core/Command/UploadAvatarHandler.php @@ -100,8 +100,13 @@ class UploadAvatarHandler $manager = new ImageManager; - // Explicitly tell Intervention to encode the image as JSON (instead of having to guess from the extension) - $encodedImage = $manager->make($tmpFile)->orientate()->fit(100, 100)->encode('jpg', 100); + // Explicitly tell Intervention to encode the image as PNG (instead of having to guess from the extension) + // Read exif data to orientate avatar only if EXIF extension is enabled + if (extension_loaded('exif')) { + $encodedImage = $manager->make($tmpFile)->orientate()->fit(100, 100)->encode('png', 100); + } else { + $encodedImage = $manager->make($tmpFile)->fit(100, 100)->encode('png', 100); + } file_put_contents($tmpFile, $encodedImage); $this->events->fire( @@ -117,7 +122,7 @@ class UploadAvatarHandler $mount->delete($file); } - $uploadName = Str::lower(Str::quickRandom()).'.jpg'; + $uploadName = Str::lower(Str::quickRandom()).'.png'; $user->changeAvatarPath($uploadName);