Rework EXIF stripping/orientation
authorJacob Casper <dev@jacobcasper.com>
Sat, 9 Apr 2022 21:15:53 +0000 (16:15 -0500)
committerJacob Casper <dev@jacobcasper.com>
Sat, 9 Apr 2022 21:15:53 +0000 (16:15 -0500)
This makes sure we reorient images with orientation info from iOS before
we strip them.

upload.php

index d69e283..65edac0 100644 (file)
@@ -22,12 +22,28 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
       die('Upload error');
     }
     $size = $images['size'][$i];
-    // strip EXIF
+
+    // imagemagick manip code
     $img = new Imagick($tmp_file);
-    // keep ICC for quality
+    // no compression
+    $img->setImageCompressionQuality(100);
     $profiles = $img->getImageProfiles("icc", true);
+    $exif_orientation = $img->getImageOrientation();
+
+    // STRIP EXIF DATA
     $img->stripImage();
+
+    // REAPPLY EXIF DATA
+    if($exif_orientation === imagick::ORIENTATION_BOTTOMRIGHT) {
+      $img->rotateImage("#000", 180);
+    } elseif ($exif_orientation === imagick::ORIENTATION_RIGHTTOP) {
+      $img->rotateImage("#000", 90);
+    } elseif ($exif_orientation === imagick::ORIENTATION_LEFTBOTTOM) {
+      $img->rotateImage("#000", -90);
+    }
+    $img->setImageOrientation(imagick::ORIENTATION_TOPLEFT);
     if(!empty($profiles)) {
+      // keep ICC for quality
       $img->profileImage('icc', $profiles['icc']);
     }