Automatically rotate and mirror images based on EXIF orientation (only compatiable with "convert" option selected at the moment)

This commit is contained in:
Michael Save 2013-01-24 03:24:38 +11:00
parent cd81ae8ea5
commit a44e0571bc

View File

@ -421,6 +421,81 @@ if (isset($_POST['delete'])) {
error($config['error']['maxsize']); 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 // create image object
$image = new Image($upload, $post['extension']); $image = new Image($upload, $post['extension']);