imagecreatefromjpeg不旋转图像

时间:2016-01-25 09:25:53

标签: php php-gd

我遇到了imagecreatefromjpeg和图像旋转的问题。

更具体一点:

图像#1 https://dl.dropboxusercontent.com/u/9271284/stackoverflow/20160124112643911541_orig.jpg由imagecreatefromjpeg正常旋转(exif标记被尊重),但在Picasa或Win10照片查看器中没有。

我的代码中没有旋转,当我说“通过imagecreatefromjpeg正确旋转”时,我的意思是,文学。只需做一下

$img = imagecreatefromjpeg($filename);

图像从文件加载并正确旋转。我正在使用GD版本2.1.1-dev运行PHP 5.5.31-2 + deb.sury.org~trusty + 1。

图像#2 https://dl.dropboxusercontent.com/u/9271284/stackoverflow/20160125070736520868_orig.jpg未被imagecreatefromjpeg正常旋转(exif标记未被尊重),但在Picasa和Win10照片查看器中正确旋转。

另外,使用优秀的Jeffrey的Exif Viewer http://regex.info/exif.cgi结果与我从imagecreatefromjpeg看到的结果一致。

1 个答案:

答案 0 :(得分:0)

有点违反直觉,实际上图像#2正确显示而图像#1被破坏。

两张图像的EXIF方向值均为6,表示图像逆时针旋转90度。 (有关更多详细信息,请参阅有关EXIF方向的this excellent post。)

imagecreatefromjpeg无法以任何方式转换图片。它正在加载图像' raw'。它看起来只是旋转,因为您的默认查看器(Windows缩略图/ Windows照片查看器?)自动根据EXIF值执行此操作。杰弗里的Exif Viewer也显示原始图像,这就是为什么你的结果是一致的。

根据该值,要正确显示两个图像,您应该执行90度顺时针旋转变换:

$img = imagerotate($img, -90, 0);

这给出了以下结果(此处缩小的图像):

图片#1:

enter image description here

图片#2:

enter image description here

这正是我在Win8照片查看器中看到的两个图像。因此,因为图像#1的方向值错误,所以无法通过代码正确旋转它。