智能手机朝相反方向拍摄的照片存在问题

这和文本无关。

你好。
我是Mandai,负责Wild 开发团队。

如今,我们生活在一个用智能手机就能轻松拍摄高质量照片的时代,单反相机的使用似乎已经大幅减少。

如今,给孩子拍照并存储在云端已经变得司空见惯。

我们将分享如何处理系统处理此类图像时,由于某种原因图像方向未对齐的情况。

图像处理方面没有任何问题!

至于图像处理方面是否存在任何问题,则没有出现任何问题。

由于我使用的是FuelPHP 上传模块

直接指定图片 URL 显示图片没有问题,但通过 HTML 标签加载图片时,图片会反转……

那么,是图片本身的问题吗?

在开发环境中,图片本身没有问题,但当我从电脑上传出现此问题的图片时,它们仍然会朝向错误的方向。
这种情况只发生在用智能手机拍摄的 JPEG 图片上。

就这样吗?我怀疑是不是Exif信息导致了这个问题,所以我检查了Exif信息中是否有这类信息。

要使用 PHP 进行检查,请使用 exif_read_data 函数。

$exif = exif_read_data('/path/to/hogehoge.jpg');

然后,一排人走了出来。

 array ( 'FileName' => 'hogehoge.jpg', 'FileDateTime' => 1478746964, 'FileSize' => 1510220, 'FileType' => 2, 'MimeType' => 'image/jpeg', 'SectionsFound' => 'ANY_TAG, IFD0, THUMBNAIL, EXIF, GPS', 'COMPUTED' => array ( 'html' => 'width="2592" height="1936"', 'Height' => 1936, 'Width' => 2592, 'IsColor' => 1, 'ByteOrderMotorola' => 1, 'ApertureFNumber' => 'f/2.4', 'Thumbnail.FileType' => 2, 'Thumbnail.MimeType' => 'image/jpeg', ), 'Make' => 'Apple', 'Model' => 'iPad mini 2', 'Orientation' => 6, 'XResolution' => '72/1', 'YResolution' => '72/1', 'ResolutionUnit' => 2, 'Software' => '9.3.2', 'DateTime' => '2016:10:10 15:52:37', 'YCbCrPositioning' => 1, 'Exif_IFD_Pointer' => 206, 'GPS_IFD_Pointer' => 1030, 'THUMBNAIL' => array ( 'Compression' => 6, 'XResolution' => '72/1', 'YResolution' => '72/1', 'ResolutionUnit' => 2, 'JPEGInterchangeFormat' => 1434, 'JPEGInterchangeFormatLength' => 9014, ), 'ExposureTime' => '1/1506', 'FNumber' => '12/5', 'ExposureProgram' => 2, 'ISOSpeedRatings' => 32, 'ExifVersion' => '0221', 'DateTimeOriginal' => '2016:10:10 15:52:37', 'DateTimeDigitized' => '2016:10:10 15:52:37', 'ComponentsConfiguration' => '^A^B^C' . "\0" . '', 'ShutterSpeedValue' => '12045/1141', 'ApertureValue' => '4845/1918', 'BrightnessValue' => '14471/1420', '曝光偏置值' => '0/1', '测光模式' => 5, '闪光灯' => 32, '焦距' => '33/10', '拍摄对象位置' => ...(省略)... )

智能手机上记录的 Exif 信息非常详细,包括图像尺寸、拍摄日期和时间、GPS(如果开启)、快门速度、光圈等等。

信息似乎太多了,但我要找的数据就在其中!

这是“方向”部分。

 

根据方向信息校正图像旋转

在查找有关图像 Exif 信息的更多信息时,我偶然发现了
一份来自日本电子信息技术产业协会的文档虽然它包含极其详细的信息,但也考验读者的理解能力。
你只需要根据图像方向部分编写代码即可。

你明白吗?

于是,我列了个清单。

我从未遇到过需要翻转的图片,但根据我阅读的文档,似乎确实存在这种情况。最
常见的设置是 1、3、6 和 8。查看我手头的图片,似乎 3 通常用于横向拍摄,6 用于纵向拍摄。3
表示旋转 180 度,这意味着图片是横向拍摄的(因为是横向),但智能手机会将其识别为上下颠倒。
(在 iPhone 上,这就像 HOME 键反转了一样。)
6 表示旋转 90 度,图片方向为纵向,表明智能手机是竖着拿的。一旦你弄清楚了这一点,你只需要根据 Exif 信息旋转图片并保存即可。旋转和翻转可以FuelPHP 的 Image 类轻松处理
但是,重写 ExifPEL 的。如果您不需要 Exif 信息,只需根据方向信息旋转图像并覆盖原图即可。但如果您只旋转图像而不修改 Exif 信息,则将无法收集数据,因此请务必小心

取向值 修复
1 未经处理的也可以
2 水平翻转图像
3 将图像顺时针旋转 180 度。
4 垂直翻转图像
5 将图像顺时针旋转 90 度,然后水平翻转。
6 将图像顺时针旋转 90 度。
7 将图像逆时针旋转 90 度,并水平翻转。
8 将图像逆时针旋转 90 度
如果您觉得这篇文章有帮助,请点赞!
1
加载中...
1 票,平均:1.00 / 11
1,360
X Facebook 哈特纳书签 口袋

写这篇文章的人

关于作者

万代洋一

我的主要工作是为社交游戏开发 Web API,但我也很幸运能够做很多其他工作,包括营销。
此外,我在 Beyond 中的肖像权被视为 CC0。