Image EXIF now properly stripped using either Imagick or GD for member profile image...
authorLaury GvR <laury@gaslightmedia.com>
Fri, 23 Jun 2017 16:31:57 +0000 (12:31 -0400)
committerLaury GvR <laury@gaslightmedia.com>
Fri, 23 Jun 2017 16:31:57 +0000 (12:31 -0400)
models/admin/ajax/imageUpload.php

index ab8fb2b..216b585 100644 (file)
@@ -124,6 +124,7 @@ class GlmMembersAdmin_ajax_imageUpload extends GlmDataImages
 
                 // Store the image
                 $file = $this->storeImage($file, $refType, $refTable, $refDest);
+//                error_log(json_encode($file));
 
                 $return['files'][] = $file;
 
@@ -180,6 +181,9 @@ class GlmMembersAdmin_ajax_imageUpload extends GlmDataImages
             );
         }
 
+        // Strip meta data off image - this prevents EXIF orientation shenanigans
+        $file['tmp_name'] = $this->stripImageMeta($file['tmp_name']);
+
         // Get the desired file name and add a timestamp to it to ensure that it's unique
         $fInfo = pathinfo($file['name']);
 
@@ -289,9 +293,16 @@ class GlmMembersAdmin_ajax_imageUpload extends GlmDataImages
     /*
      * Strip an image of all its metadata using either imagemagick or GD
      *
-     * None of the metadata will be preserved. This function can be refined with settings
-     * to preserve certain metadata fields. In case of GD, image type is determined, but
-     * if it is not jpg, png or bmp, no stripping will take place.
+     * None of the metadata will be preserved. This function can be refined further
+     * with settings to preserve certain metadata fields if desired at a later point.
+     *
+     * In case of Image Magick/Imagick being installed, a new Imagick object is created
+     * that rewrites the original image.
+     *
+     * In case of GD, image type is determined to use the appropriate imagecreatfrom<type>
+     * function. If it is not either JPG, PNG or BMP, no stripping will take place.
+     *
+     * If neither extension is found, the image is returned unchanged..
      *
      * @param $imageName string Image resource to be processed
      *
@@ -314,24 +325,25 @@ class GlmMembersAdmin_ajax_imageUpload extends GlmDataImages
 
         } else if (extension_loaded('gd') && function_exists('gd_info')) {
             $image_type = exif_imagetype($imageName);
+            $newImageQuality = 100;
             switch ($image_type) {
-                case "IMAGETYPE_JPEG":
-                    $imageName = imagecreatefromjpeg($imageName);
+                case 2: // JPG
+                    $newImage = imagecreatefromjpeg($imageName);
                     break;
 
-                case "IMAGETYPE_PNG":
-                    $imageName = imagecreatefrompng($imageName);
+                case 3: // PNG
+                    $newImage = imagecreatefrompng($imageName);
                     break;
 
-                case "IMAGETYPE_BMP":
-                    $imageName = imagecreatefrombmp($imageName);
+                case 6: // BMP
+                    $newImage = imagecreatefrombmp($imageName);
                     break;
 
                 default:
                     break;
             }
+            imagejpeg($newImage, $imageName, $newImageQuality);
         }
-
         return $imageName;
     }