imagecreatefromjpeg 不旋转图像

imagecreatefromjpeg not rotating image

我在使用 imagecreatefromjpeg 和图像旋转时遇到问题。

更具体地说:

图片 #1 https://dl.dropboxusercontent.com/u/9271284/Whosebug/20160124112643911541_orig.jpg 由 imagecreatefromjpeg 正确旋转(支持 exif 标签)但在 Picasa 或 Win10 照片查看器中没有。

我的代码里没有轮换,当我说"is rotated properly by imagecreatefromjpeg"我是认真的,文学。只需做

$img = imagecreatefromjpeg($filename);

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

图片 #2 https://dl.dropboxusercontent.com/u/9271284/Whosebug/20160125070736520868_orig.jpg 未通过 imagecreatefromjpeg 正确旋转(exif 标签不被接受)但在 Picasa 和 Win10 照片查看器中正确旋转。

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

有些 counter-intuitively,实际上是图像 #2 显示正确,图像 #1 损坏。

两张图片的 EXIF 方向值为 6,这意味着图片旋转了 90 度 counter-clockwise。 (有关详细信息,请参阅 this excellent post 关于 EXIF 方向。)

imagecreatefromjpeg 不会以任何方式转换图像。它正在加载图像 'raw'。它看起来只是旋转了,因为您的默认查看器(Windows thumbnail/Windows 照片查看器?)是根据 EXIF 值自动执行此操作。 Jeffrey 的 Exif 查看器也显示原始图像,这就是您的结果一致的原因。

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

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

结果如下(图片按比例缩小):

图片 #1:

图片 #2:

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