honor jpeg orientation
[bizou.git] / functions.php
index 630be00..867bb49 100644 (file)
@@ -50,10 +50,13 @@ function getPreview($imgFile, $maxSize = THUMB_SIZE)
                set_time_limit(20);
 
                $ext = strtolower(substr($imgFile, -4));
-               if ($ext == ".jpg")
+               if ($ext == ".jpg") {
                        $img = imagecreatefromjpeg($imgFile);
-               else
+                       $exif = exif_read_data($imgFile);
+               } else {
                        $img = imagecreatefrompng($imgFile);
+               }
+               if ($img === false) return ""; #read error (wrong permission...)
 
                $w = imagesx($img);
                $h = imagesy($img);
@@ -67,7 +70,8 @@ function getPreview($imgFile, $maxSize = THUMB_SIZE)
                # config to allow group writable files
                umask(DATA_UMASK);
                # create the thumbs directory recursively
-               if (! is_dir(dirname($newImgFile))) mkdir(dirname($newImgFile), 0777, true);
+               if (! is_dir(dirname($newImgFile))) @mkdir(dirname($newImgFile), 0777, true)
+                       or die("Could not write in data dir. Please fix permissions.");
 
                if ($w > $h) {
                        $newW = $maxSize;
@@ -81,10 +85,17 @@ function getPreview($imgFile, $maxSize = THUMB_SIZE)
 
                imagecopyresampled($newImg, $img, 0, 0, 0, 0, $newW, $newH, $w, $h);
 
-               if ($ext == ".jpg")
-                       imagejpeg($newImg, $newImgFile);
-               else
+               if ($ext == ".jpg") {
+                       if (!empty($exif['Orientation'])) {
+                               $orientation = $exif['Orientation'];
+                               if     ($orientation === 3) $newImg = imagerotate($newImg, 180, 0);
+                               elseif ($orientation === 6) $newImg = imagerotate($newImg, -90, 0);
+                               elseif ($orientation === 8) $newImg = imagerotate($newImg, 90, 0);
+                       }
+                       imagejpeg($newImg, $newImgFile, JPEG_QUALITY);
+               } else {
                        imagepng($newImg, $newImgFile);
+               }
                
                imagedestroy($img);
                imagedestroy($newImg);
@@ -108,7 +119,8 @@ function getAlbumPreview($dir)
                # config to allow group writable files
                umask(DATA_UMASK);
                # create the thumbs directory recursively
-               if (! is_dir(dirname($previewFile))) mkdir(dirname($previewFile), 0777, true);
+               if (! is_dir(dirname($previewFile))) @mkdir(dirname($previewFile), 0777, true)
+                       or die("Could not write in data dir. Please fix permissions.");
 
                // no preview: look for a preview in current dir, write it, return it
                foreach (scandir($dir) as $file) if ($file[0] != '.') {