顺晟科技
2021-06-16 10:34:47
223
随着智能手机的普及,人们已经习惯于拍照并上传到网上。有时候照片发反了方向,甚至是低着头。为此,各大微博都不约而同的给照片添加左右旋转的功能。这样可以解决问题,但能否更进一步,自动选择正确的照片朝向?就在最近,我们有一个类似的场景,所以本文将讨论这个问题。
事实上,数字设备拍摄照片时,照片文件会附带许多属性,这些属性构成了Exif信息。当你访问我的相册时,你会在照片下面找到相应的Exif信息。Exif中有一个Orientation字段,用来存储照片的方向。这就是我们需要的。看它的定义:
EXIF方向值行#0为:列#0为:
1左侧
2右侧
3底部右侧
4底部左侧
5左侧操作
6右侧侧钻
7右侧底部
8左侧底部
注:带“*”的值不常见,因为它们代表“翻转”方向。通过
当然,Exif中的Orientation属性取决于相机是否有方向传感器。不过据我所知,目前大部分数码拍照设备都支持录音方向。1为默认值,2、4、5、7表示照片已翻转。通常,该值应为1、3、6和8中的一个。下面是描述具体轮换策略的更生动的图片:
如何从图片中获取Exif信息,所有语言都有可以直接使用的封装代码。Javascript也不例外。一名外国学生在2008年发布了可用的代码。他的方法分为两步。一是通过Ajax获取原始二进制,在firefox和webkit中更容易处理,需要IE下的VBScript的帮助;第二步是从原始数据的不同位置获取相关信息,这基本上是体力劳动。想了解更多的同学可以点击这一段的几个链接观看。
从图片的Exif信息中获取方向后,您可以根据它自动旋转图片。canvas、filter、vml和css3都可以旋转图片。网上也有很多打包代码可以直接拿来用。
综上所述,我写了一个演示,兼容除Opera之外的大多数其他浏览器(在Opera11.6下测试,也OK)。
此外,如果图片的原始二进制是使用FileReader Api获得的,则可以在浏览器中本地自动旋转图片。这在上传前预览图片时很有用。这是演示。
PS:其实大部分图像查看客户端已经支持自动旋转了,所以一般数码设备拍的照片都是电脑查看,方向都是正确的。许多缩略图生成程序也可以在缩放前指定自动旋转(例如,ImageMagick的-auto-orient参数)。
再次PS:纯前端图像Exif只是一种尝试。如果Exif信息需要经常使用,或者后端获取,有数据库更可靠。
11
2022-05
21
2022-04
15
2022-03
15
2022-03
28
2021-08
28
2021-08