diff --git a/inc/config.php b/inc/config.php index 8ae86281..d9210ab5 100644 --- a/inc/config.php +++ b/inc/config.php @@ -510,8 +510,9 @@ // Strip EXIF metadata from JPEG files. $config['strip_exif'] = false; // Use the command-line `exiftool` tool to strip EXIF metadata without decompressing/recompressing JPEGs. - // Ignored when $config['redraw_image'] is true. - $config['strip_with_exiftool'] = false; + // Ignored when $config['redraw_image'] is true. This is also used to adjust the Orientation tag when + // $config['strip_exif'] is false and $config['convert_manual_orient'] is true. + $config['use_exiftool'] = false; // Redraw the image to strip any excess data (commonly ZIP archives) WARNING: This might strip the // animation of GIFs, depending on the chosen thumbnailing method. It also requires recompressing diff --git a/post.php b/post.php index a6ed55e6..fa910939 100644 --- a/post.php +++ b/post.php @@ -452,7 +452,7 @@ if (isset($_POST['delete'])) { if ($config['convert_auto_orient'] && ($post['extension'] == 'jpg' || $post['extension'] == 'jpeg')) { // The following code corrects the image orientation. // 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['redraw_image'] || (($config['strip_exif'] && !$config['strip_with_exiftool']) && ($post['extension'] == 'jpg' || $post['extension'] == 'jpeg')))) { + if (!($config['redraw_image'] || (($config['strip_exif'] && !$config['use_exiftool']) && ($post['extension'] == 'jpg' || $post['extension'] == 'jpeg')))) { if (in_array($config['thumb_method'], array('convert', 'convert+gifsicle', 'gm', 'gm+gifsicle'))) { $exif = exif_read_data($upload); $gm = in_array($config['thumb_method'], array('gm', 'gm+gifsicle')); @@ -460,8 +460,19 @@ if (isset($_POST['delete'])) { if ($config['convert_manual_orient']) { $error = shell_exec_error(($gm ? 'gm ' : '') . 'convert ' . escapeshellarg($upload) . ' ' . - ImageConvert::jpeg_exif_orientation(false, $exif) . ' +profile "*" ' . + ImageConvert::jpeg_exif_orientation(false, $exif) . ' ' . + ($config['strip_exif'] ? '+profile "*"' : + ($config['use_exiftool'] ? '' : '+profile "*"') + ) . ' ' . escapeshellarg($upload)); + if ($config['use_exiftool'] && !$config['strip_exif']) { + if ($exiftool_error = shell_exec_error( + 'exiftool -q -orientation=1 -n ' . escapeshellarg($upload))) + error('exiftool failed!', null, $exiftool_error); + } else { + // TODO: Find another way to remove the Orientation tag from the EXIF profile + // without needing `exiftool`. + } } else { $error = shell_exec_error(($gm ? 'gm ' : '') . 'convert ' . escapeshellarg($upload) . ' -auto-orient ' . escapeshellarg($upload)); @@ -469,6 +480,8 @@ if (isset($_POST['delete'])) { if ($error) error('Could not auto-orient image!', null, $error); $size = @getimagesize($upload); + if ($config['strip_exif']) + $post['exif_stripped'] = true; } } } @@ -515,8 +528,8 @@ if (isset($_POST['delete'])) { $thumb->_destroy(); } - if ($config['redraw_image'] || ($config['strip_exif'] && ($post['extension'] == 'jpg' || $post['extension'] == 'jpeg'))) { - if (!$config['redraw_image'] && $config['strip_with_exiftool']) { + if ($config['redraw_image'] || (!@$post['exif_stripped'] && $config['strip_exif'] && ($post['extension'] == 'jpg' || $post['extension'] == 'jpeg'))) { + if (!$config['redraw_image'] && $config['use_exiftool']) { if($error = shell_exec_error('exiftool -q -all= ' . escapeshellarg($upload))) error('Could not strip EXIF metadata!', null, $error); } else {