diff --git a/post.php b/post.php index 124e0c65..c5e68578 100644 --- a/post.php +++ b/post.php @@ -421,6 +421,81 @@ if (isset($_POST['delete'])) { error($config['error']['maxsize']); } + // The following code corrects the image orientation based on EXIF. + // Currently only works with the 'convert' option selected but it could easily be expanded to work with the rest if you can be bothered. + if ($config['thumb_method'] == 'convert') { + if ($post['extension'] == 'jpg' || $post['extension'] == 'jpeg') { + $exif = exif_read_data($upload); + if (isset($exif['Orientation'])) { + switch($exif['Orientation']) { + case 1: + // Normal + $args = false; + break; + case 2: + // 888888 + // 88 + // 8888 + // 88 + // 88 + + $args = '-flop'; + break; + case 3: + + // 88 + // 88 + // 8888 + // 88 + // 888888 + + $args = '-flip -flop'; + break; + case 4: + // 88 + // 88 + // 8888 + // 88 + // 888888 + + $args = '-flip'; + break; + case 5: + // 8888888888 + // 88 88 + // 88 + + $args = '-rotate 90 -flop'; + break; + case 6: + // 88 + // 88 88 + // 8888888888 + + $args = '-rotate 90'; + break; + case 7: + // 88 + // 88 88 + // 8888888888 + + $args = '-rotate "-90" -flop'; + break; + case 8: + // 8888888888 + // 88 88 + // 88 + + $args = '-rotate "-90"'; + break; + } + + if ($args) + shell_exec('convert ' . escapeshellarg($upload) . ' ' . $args . ' ' . escapeshellarg($upload)); + } + } + } + // create image object $image = new Image($upload, $post['extension']);