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

大家好,
我是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 数据的详细信息时,一份来自日本电子信息技术产业协会 (JEITA) 的文档我找到了
这份文档内容非常详尽,但也相当难懂。
看来我只需要根据其中关于图像方向的部分编写代码即可。
你明白吗?
于是,我列了个清单。
我还没遇到过图像翻转的情况,但根据我阅读的文档,似乎确实存在这种情况。
最常见的值似乎是 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
