目前正在使用PHP和iMagick开发海报打印Web应用程序。如何停止基于EXIF'orientation'数据的PHP iMagick自动旋转图像
这是我使用来测试应用程序的上载/图像编辑功能的图象例子:
图像包含以下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
然而 - iMagick ,当用这个图像构建__结构时,根据[Orientation] => 6
(我想!)自动将其旋转90度CCW。造成这种...
我想知道的是什么...
我如何保持在页面顶部看到的图像的原始方向?这是可能的,通过禁用iMagick执行的自动旋转?
非常感谢
更新:这里的解决方案,我想出来的......这将修复基于取向的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;
}
}
thanks izym。你有关于如何使用这些常量的更多信息? – kaese 2010-11-24 14:24:05
请注意,Imagick :: setImageOrientation()实际上并不旋转图像,它只是更改将与图像一起保存的EXIF旋转信息。在某些情况下,可能是您想要做的事情,但通常最好是实际旋转图像(请参阅我发布的代码示例作为答案)。依靠EXIF旋转信息的问题是,并非所有的Web浏览器和图像查看软件都会自动将其正确定向。 – orrd 2013-02-20 21:07:40