Actualmente estoy trabajando con PHP e iMagick para desarrollar una aplicación web de impresión de pósters.Cómo detener las imágenes auto-rotatorias de PHP iMagick basadas en los datos de orientación EXIF
Esta es la imagen de ejemplo que estoy utilizando para probar las funciones de edición de carga/de imagen de la aplicación:
La imagen contiene los siguientes datos EXIF:
[FileName] => 1290599108_IMG_6783.JPG
[FileDateTime] => 1290599109
[FileSize] => 4275563
[FileType] => 2
[MimeType] => image/jpeg
[SectionsFound] => ANY_TAG, IFD0, THUMBNAIL, EXIF, INTEROP, MAKERNOTE
[COMPUTED] => Array
(
[html] => width="3504" height="2336"
[Height] => 2336
[Width] => 3504
[IsColor] => 1
[ByteOrderMotorola] => 0
[CCDWidth] => 22mm
[ApertureFNumber] => f/5.6
[UserComment] =>
[UserCommentEncoding] => UNDEFINED
[Thumbnail.FileType] => 2
[Thumbnail.MimeType] => image/jpeg
)
[Make] => Canon
[Model] => Canon EOS 30D
[Orientation] => 6
[XResolution] => 72/1
[YResolution] => 72/1
[ResolutionUnit] => 2
[DateTime] => 2009:08:31 08:23:49
[YCbCrPositioning] => 2
[Exif_IFD_Pointer] => 196
Sin embargo - imagick , cuando __constructó con esta imagen, la gira automáticamente 90 grados adicionales de CCW según [Orientation] => 6
(¡creo!). Lo que resulta en este ...
Lo que me gustaría saber es ...
¿Cómo puedo mantener la orientación original de la imagen que se ve en la parte superior de la página? ¿Y esto es posible al desactivar la rotación automática realizada por iMagick?
Muchas gracias
ACTUALIZACIÓN: Aquí está la solución que yo he llegado con ... Se fijará la orientación basada en la orientación en los datos EXIF
public function fixOrientation() {
$exif = exif_read_data($this->imgSrc);
$orientation = $exif['Orientation'];
switch($orientation) {
case 6: // rotate 90 degrees CW
$this->image->rotateimage("#FFF", 90);
break;
case 8: // rotate 90 degrees CCW
$this->image->rotateimage("#FFF", -90);
break;
}
}
gracias izym. ¿Tiene más información sobre cómo se pueden usar estas constantes? – kaese
Tenga en cuenta que Imagick :: setImageOrientation() en realidad no rota la imagen, simplemente cambia la información de rotación EXIF que se guardará con la imagen. En algunos casos, eso puede ser lo que desea hacer, pero generalmente es mejor rotar físicamente la imagen (vea la muestra del código que publiqué como respuesta). El problema de depender de la información de rotación EXIF es que no todos los navegadores web y el software de visualización de imágenes lo orientarán automáticamente. – orrd