Si lo que desea es utilizar GD y la extensión php EXIF puede utilizar esto:
function _mirrorImage ($imgsrc)
{
$width = imagesx ($imgsrc);
$height = imagesy ($imgsrc);
$src_x = $width -1;
$src_y = 0;
$src_width = -$width;
$src_height = $height;
$imgdest = imagecreatetruecolor ($width, $height);
if (imagecopyresampled ($imgdest, $imgsrc, 0, 0, $src_x, $src_y, $width, $height, $src_width, $src_height))
{
return $imgdest;
}
return $imgsrc;
}
function adjustPicOrientation($full_filename){
$exif = exif_read_data($full_filename);
if($exif && isset($exif['Orientation'])) {
$orientation = $exif['Orientation'];
if($orientation != 1){
$img = imagecreatefromjpeg($full_filename);
$mirror = false;
$deg = 0;
switch ($orientation) {
case 2:
$mirror = true;
break;
case 3:
$deg = 180;
break;
case 4:
$deg = 180;
$mirror = true;
break;
case 5:
$deg = 270;
$mirror = true;
break;
case 6:
$deg = 270;
break;
case 7:
$deg = 90;
$mirror = true;
break;
case 8:
$deg = 90;
break;
}
if ($deg) $img = imagerotate($img, $deg, 0);
if ($mirror) $img = _mirrorImage($img);
$full_filename = str_replace('.jpg', "-O$orientation.jpg", $full_filename);
imagejpeg($img, $full_filename, 95);
}
}
return $full_filename;
}
no estaba seguro de cómo utilizar la clase Andrew ha escrito, por lo que acaba de colocar la función dentro de mi controlador y pasó la variable de la imagen y su orientación. El trabajo es como un campeón. El único comentario es verificar que la imagen sea de tipo JPEG antes de llamar a exif_read_data, de lo contrario, php lanzará un error. – w00tw00t111
Tenga en cuenta que este código requiere que instale la biblioteca de WideImage PHP. (Andrew lo menciona, pero sé que la mayoría de la gente solo va a copiar y pegar el código y luego no entender por qué no funciona para ellos.) Si no quiere instalar WideImage, hay otros ejemplos de cómo haz esto sin eso – orrd
@ w00tw00t111 es un tipo de archivo que no es JPEG, ¿qué causa el siguiente error? 'Error fatal: excepción no detectada 'WideImage_UnknownImageOperationException' con el mensaje 'No se puede cargar' exifOrient 'operation.'' –