MDL-46763 core: Change icon processing to retain source format
authorgthomas2 <gthomas@moodlerooms.com>
Thu, 15 Jan 2015 17:02:03 +0000 (17:02 +0000)
committerEloy Lafuente (stronk7) <stronk7@moodle.org>
Tue, 10 Feb 2015 22:55:57 +0000 (23:55 +0100)
lib/gdlib.php

index 8ef41f6..7b9f46f 100644 (file)
@@ -105,6 +105,7 @@ function process_new_icon($context, $component, $filearea, $itemid, $originalfil
     }
 
     $imageinfo = getimagesize($originalfile);
+    $imagefnc = '';
 
     if (empty($imageinfo)) {
         return false;
@@ -137,6 +138,13 @@ function process_new_icon($context, $component, $filearea, $itemid, $originalfil
                 debugging('JPEG not supported on this server');
                 return false;
             }
+            // If the user uploads a jpeg them we should process as a jpeg if possible.
+            if (function_exists('imagejpeg')) {
+                $imagefnc = 'imagejpeg';
+                $imageext = '.jpg';
+                $filters = null; // Not used.
+                $quality = 90;
+            }
             break;
         case IMAGETYPE_PNG:
             if (function_exists('imagecreatefrompng')) {
@@ -150,19 +158,22 @@ function process_new_icon($context, $component, $filearea, $itemid, $originalfil
             return false;
     }
 
-    if (function_exists('imagepng')) {
-        $imagefnc = 'imagepng';
-        $imageext = '.png';
-        $filters = PNG_NO_FILTER;
-        $quality = 1;
-    } else if (function_exists('imagejpeg')) {
-        $imagefnc = 'imagejpeg';
-        $imageext = '.jpg';
-        $filters = null; // not used
-        $quality = 90;
-    } else {
-        debugging('Jpeg and png not supported on this server, please fix server configuration');
-        return false;
+    // The conversion has not been decided yet, let's apply defaults (png with fallback to jpg).
+    if (empty($imagefnc)) {
+        if (function_exists('imagepng')) {
+            $imagefnc = 'imagepng';
+            $imageext = '.png';
+            $filters = PNG_NO_FILTER;
+            $quality = 1;
+        } else if (function_exists('imagejpeg')) {
+            $imagefnc = 'imagejpeg';
+            $imageext = '.jpg';
+            $filters = null; // Not used.
+            $quality = 90;
+        } else {
+            debugging('Jpeg and png not supported on this server, please fix server configuration');
+            return false;
+        }
     }
 
     if (function_exists('imagecreatetruecolor')) {