1 file.inc | file_validate_image_orientation(File $file, $orientation = 0) |
Check for EXIF orientation data and rotate file if needed.
Parameters
File $file: A file entity.
$orientation: A flag indicating that EXIF data should be checked and image rotated if necessary.
Return value
An array. If the file is an image and did not meet the requirements, it: will contain an error message.
See also
Related topics
File
- core/
includes/ file.inc, line 1984 - API for handling file uploads and server file management.
Code
function file_validate_image_orientation(File $file, $orientation = 0) {
$errors = array();
// Check first that the file is an image.
if ($info = image_get_info($file->uri)) {
// Is orientation required and is PHP function available?
if ($orientation && function_exists('exif_read_data')) {
$file_exif = @exif_read_data(backdrop_realpath($file->uri));
// If the Orientation key|value exists rotate as required.
if (is_array($file_exif) && isset($file_exif['Orientation'])) {
// Orientation numbers and corresponding degrees.
// @note: Odd numbers are flipped images, would need different process.
switch ($file_exif['Orientation']) {
case 3:
$degrees = 180;
break;
case 6:
$degrees = 90;
break;
case 8:
$degrees = 270;
break;
default:
$degrees = 0;
}
if ($degrees > 0) {
// Load the image object for manipulation.
$file_image = image_load($file->uri);
if (image_rotate($file_image, $degrees, 0xffffff)) {
image_save($file_image);
}
backdrop_set_message(t('The image was rotated by @degrees degrees.', array('@degrees' => $degrees)));
}
}
}
}
return $errors;
}