如何停止基于 EXIF“方向"数据的 PHP iMagick 自动旋转图像

2021-12-28 00:00:00 image web-applications exif php imagick

目前正在使用 PHP 和 iMagick 开发海报打印 Web 应用程序.

Currently working with PHP and iMagick to develop a poster printing Web application.

这是我用来测试应用程序的上传/图像编辑功能的示例图像:

This is the example image I am using to test upload/image editing features of the application:

图像包含以下 EXIF 数据:

The image contains the following EXIF data:

[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,当使用这个图像 __construct' 时,会根据 [Orientation] => 自动将其逆时针旋转 90 度.6(我想!).导致这个...

However - iMagick, when __construct'ed with this image, automatically rotates it an additional 90 degrees CCW as per [Orientation] => 6 (I think!). Resulting in this...

我想知道的是...

如何保持在页面顶部看到的图像的原始方向?这是否可以通过禁用 iMagick 执行的自动旋转来实现?

How can I maintain the original orientation of the image seen at the top of the page? And is this possible through disabling the auto-rotation performed by 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;

       }

 }

推荐答案

尝试 Imagick::setImageOrientation.试验可用常量.

相关文章