智能手机拍摄的图像面向未来的问题
你好。
我是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' => 数组 ('html' => 'width="2592" height="1936"'、'高度' => 1936、'宽度' => 2592 , 'IsColor' => 1, 'ByteOrderMotorola' => 1, 'ApertureFNumber' => 'f/2.4', 'Thumbnail.FileType' => 2, 'Thumbnail.MimeType' => 'image/jpeg',), '品牌' => 'Apple', '型号' => 'iPad mini 2', '方向' => 6, 'XResolution' => '72/1', 'YResolution' => '72/1', ' ResolutionUnit' => 2、'软件' => '9.3.2'、'日期时间' => '2016:10:10 15:52:37'、'YCbCrPositioning' => 1、'Exif_IFD_Pointer' => 206、' GPS_IFD_Pointer' => 1030, 'THUMBNAIL' => 数组 ( '压缩' => 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' '', '快门速度值' => '12045/1141', '光圈值' => '4845/1918', '亮度值' => '14471/1420' , 'ExposureBiasValue' => '0/1', 'MeteringMode' => 5, 'Flash' => 32, 'FocalLength' => '33/10', 'SubjectLocation' => ...(省略).. )
智能手机上的 Exif 信息记录得相当详细,包括图像尺寸、拍摄日期和时间、GPS(如果打开)、快门速度、F 值等。仅此一项就相当广泛。
我感觉信息太多了,但是我找到了我要找的数据……!
这就是“方向”部分。
根据方向信息校正图像旋转
当我寻找有关图像 Exif 信息的详细信息时,我找到了
日本电子信息技术工业协会的文档虽然极其详细,但也很考验读者的阅读理解能力。
您所要做的就是根据图像方向术语进行编码。
你明白吗?
所以,我列了一个清单。
我从来没有遇到过会被反转的图像,但从我在材料中读到的内容来看,它似乎会被完成。
数字1、3、6、8经常出现。从我拥有的图像来看,似乎 3 通常设置为风景,而 6 通常设置为肖像。
3 表示 180 度旋转,因此即使照片是水平拍摄的(因为这是风景照片),智能手机也会识别出照片是上下颠倒拍摄的。
(在 iPhone 上,左右 HOME 按钮是相反的。)
此外,6 表示旋转 90 度,图像方向为纵向,因此您可以看到智能手机是垂直握住的来拍照的。了解了这一点后,您所需要做的就是根据 Exif 信息旋转图像并保存。FuelPHP 的 Image 类可以轻松完成
旋转和翻转然而,要重写Exif信息,需要
PEL如果您不需要 Exif 信息,那么简单地根据方向信息旋转它并覆盖它可能是个好主意。请注意,如果您只进行轮换处理,而对Exif信息不进行编辑,您将无法收集到。就是这样。
方位值 | 更正 |
---|---|
1 | 未处理就OK |
2 | 水平翻转图像 |
3 | 将图像顺时针旋转 180 度 |
4 | 垂直翻转图像 |
5 | 将图像顺时针旋转90度并水平翻转 |
6 | 将图像顺时针旋转 90 度 |
7 | 将图像逆时针旋转90度并水平翻转 |
8 | 将图像逆时针旋转 90 度 |