honor jpeg orientation
[bizou.git] / functions.php
index 162b01e..867bb49 100644 (file)
@@ -32,6 +32,7 @@ function getImageLink($imageSimplePath)
 }
 }
 
+if (! function_exists('getPreview')) {
 function getPreview($imgFile, $maxSize = THUMB_SIZE)
 {
        # example: data/myalbum/100.mypic.jpg
@@ -49,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);
@@ -63,10 +67,11 @@ function getPreview($imgFile, $maxSize = THUMB_SIZE)
                        return $imgFile;
                }
 
-               # uncomment this if you need group writable files
-               #umask(0002);
+               # 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;
@@ -80,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);
@@ -91,6 +103,7 @@ function getPreview($imgFile, $maxSize = THUMB_SIZE)
 
        return $newImgFile;
 }
+}
 
 function getAlbumPreview($dir)
 {
@@ -103,13 +116,14 @@ function getAlbumPreview($dir)
        } else if (is_file("$previewFile.png")) {
                return "$previewFile.png";
        } else {
-               # uncomment this if you need group writable files
-               #umask(0002);
+               # 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 != '.' and $file != '..') {
+               foreach (scandir($dir) as $file) if ($file[0] != '.') {
                        $ext = strtolower(substr($file, -4));
                        if ($ext == ".jpg" or $ext == ".png") {
                                $thumb = getPreview("$dir/$file");