七牛--关于图片上传方向不统一的问题--主要关于图片EXIF信息中旋转参数Orientation的理解
【图片引用方向纠正】直接在图片后面添加
?imageMogr/auto-orient
eg:http://data.upfitapp.com/data/2016/10/18/1629114767606399584.JPG?imageMogr2?imageMogr/auto-orient
【注】七牛有多种这种方法,具体请查看七牛开发者文档
【问题】源于公司使用七牛plupload进行图片上传,最开始使用plupload自己带的属性:
resize: {
width: 100,
height: 100,
crop: true,
quality: 60,
preserve_headers: false
}
对图片进行了压缩处理,并且压缩后的图片方向统一,不会出现图片被旋转的问题;
但是当图片的方向参数是Right-top的时候就会出现问题(后面会具体介绍,具体是什么引起的resize压缩出问题还不确定,目前表面上看和实践是这个问题,更深入的就待以后吧);
具体的表现就是图片永远卡在了上传这步,看官方的最新文档,也没有对resize的介绍了,应该是取消了,原谅我的不求甚解,时间有限
【解答】:
EXIF(Exchangeable Image File)是“可交换图像文件”的缩写,当中包含了专门为数码相机的照片而定制的元数据,可以记录数码照片的拍摄参数、缩略图及其他属性信息,简单来说,Exif信息是镶嵌在 JPEG/TIFF 图像文件格式内的一组拍摄参数,需要注意的是EXIF信息是不支持png,webp等图片格式的。
对于七牛,可以在图片后面加
?exif
参数来获取图片的exif信息。
对于Orientation参数,简单的说是记录图片拍摄的相机的旋转信息,浏览器(需要浏览器支持)可以根据这个参数中的val信息自动旋转图片到正确的方向。
如:
---在浏览器中输入以下图片链接,由于浏览器自动旋转了,我们可以看到一个显示正常的图片:
http://data.upfitapp.com/data/2016/10/18/1629114767606399584.JPG
---其实这张图片拍摄的时候相机是有旋转的,我们可以去掉图片的exif信息显示如下:
http://data.upfitapp.com/data/2016/10/18/1629114767606399584.JPG?imageMogr2/strip
---可以查询到图片的exif信息如下:
http://data.upfitapp.com/data/2016/10/18/1629114767606399584.JPG?exif
有点长:不过不用都看,只要看其中的一个参数就可以了
{
"ApertureValue": {
"val": "2.28 EV (f/2.2)",
"type": 5
},
"BrightnessValue": {
"val": "1.54 EV (9.96 cd/m^2)",
"type": 10
},
"ColorSpace": {
"val": "sRGB",
"type": 3
},
"ComponentsConfiguration": {
"val": "Y Cb Cr -",
"type": 7
},
"Compression": {
"val": "JPEG compression",
"type": 3
},
"DateTime": {
"val": "2016:10:14 07:37:52",
"type": 2
},
"DateTimeDigitized": {
"val": "2016:10:14 07:37:52",
"type": 2
},
"DateTimeOriginal": {
"val": "2016:10:14 07:37:52",
"type": 2
},
"ExifVersion": {
"val": "Exif Version 2.21",
"type": 7
},
"ExposureBiasValue": {
"val": "0.00 EV",
"type": 10
},
"ExposureMode": {
"val": "Auto exposure",
"type": 3
},
"ExposureProgram": {
"val": "Normal program",
"type": 3
},
"ExposureTime": {
"val": "1/33 sec.",
"type": 5
},
"FNumber": {
"val": "f/2.2",
"type": 5
},
"Flash": {
"val": "Flash did not fire, compulsory flash mode",
"type": 3
},
"FlashPixVersion": {
"val": "FlashPix Version 1.0",
"type": 7
},
"FocalLength": {
"val": "4.2 mm",
"type": 5
},
"FocalLengthIn35mmFilm": {
"val": "29",
"type": 3
},
"GPSAltitude": {
"val": "32.074",
"type": 5
},
"GPSAltitudeRef": {
"val": "Sea level",
"type": 1
},
"GPSDateStamp": {
"val": "2016:10:13",
"type": 2
},
"GPSDestBearing": {
"val": "126.4615",
"type": 5
},
"GPSDestBearingRef": {
"val": "T",
"type": 2
},
"GPSImgDirection": {
"val": "126.4615",
"type": 5
},
"GPSImgDirectionRef": {
"val": "T",
"type": 2
},
"GPSLatitude": {
"val": "40, 1, 7.47",
"type": 5
},
"GPSLatitudeRef": {
"val": "N",
"type": 2
},
"GPSLongitude": {
"val": "116, 29, 40.94",
"type": 5
},
"GPSLongitudeRef": {
"val": "E",
"type": 2
},
"GPSSpeed": {
"val": " 0",
"type": 5
},
"GPSSpeedRef": {
"val": "K",
"type": 2
},
"GPSTimeStamp": {
"val": "23:37:52.00",
"type": 5
},
"ISOSpeedRatings": {
"val": "200",
"type": 3
},
"Make": {
"val": "Apple",
"type": 2
},
"MakerNote": {
"val": "838 bytes undefined data",
"type": 7
},
"MeteringMode": {
"val": "Spot",
"type": 3
},
"Model": {
"val": "iPhone 6s",
"type": 2
},
"Orientation": {
"val": "Right-top",
"type": 3
},
"PixelXDimension": {
"val": "4032",
"type": 4
},
"PixelYDimension": {
"val": "3024",
"type": 4
},
"ResolutionUnit": {
"val": "Inch",
"type": 3
},
"SceneCaptureType": {
"val": "Standard",
"type": 3
},
"SceneType": {
"val": "Directly photographed",
"type": 7
},
"SensingMethod": {
"val": "One-chip color area sensor",
"type": 3
},
"ShutterSpeedValue": {
"val": "5.06 EV (1/33 sec.)",
"type": 10
},
"Software": {
"val": "9.3",
"type": 2
},
"SubSecTimeDigitized": {
"val": "486",
"type": 2
},
"SubSecTimeOriginal": {
"val": "486",
"type": 2
},
"SubjectArea": {
"val": "Within rectangle (width 753, height 756) around (x,y) = (2710,1605)",
"type": 3
},
"WhiteBalance": {
"val": "Auto white balance",
"type": 3
},
"XResolution": {
"val": "72",
"type": 5
},
"YCbCrPositioning": {
"val": "Centered",
"type": 3
},
"YResolution": {
"val": "72",
"type": 5
}
}
由以上我们可以得到图片拍摄时的val信息得到图片拍摄时相机的旋转信息是Right-top信息,我们可以由以下文档得到相机拍摄时应该是在逆时针选择了90度的基础上拍摄的:下面是相关链接=>
http://sylvana.net/jpegcrop/exif_orientation.html
http://www.impulseadventure.com/photo/exif-orientation.html
【注】七牛显示的exif信息Orientation”:{“val”:”Right-top”,”type”:3},其中type信息是可以忽略,以value信息为准
七牛--关于图片上传方向不统一的问题--主要关于图片EXIF信息中旋转参数Orientation的理解的更多相关文章
- 七牛:关于图片 EXIF 信息中旋转参数 Orientation 的理解
EXIF(Exchangeable Image File)是 “可交换图像文件” 的缩写,当中包含了专门为数码相机的照片而定制的元数据,可以记录数码照片的拍摄参数.缩略图及其他属性信息,简单来说,Ex ...
- 图片上传并显示(兼容ie),图片大小判断
图片上传并显示(兼容ie),图片大小判断 HTML <div id="swf" style="margin: 0 auto;text-align: center;& ...
- 【转载】【JAVA秒会技术之图片上传】基于Nginx及FastDFS,完成图片的上传及展示
基于Nginx及FastDFS,完成商品图片的上传及展示 一.传统图片存储及展示方式 存在问题: 1)大并发量上传访问图片时,需要对web应用做负载均衡,但是会存在图片共享问题 2)web应用服务器的 ...
- spring boot图片上传至远程服务器并返回新的图片路径
界面上传图片时考虑到可能会有用户的图片名称一致,使用UUID来对图片名称进行重新生成. //UUIDUtils public class UUIDUtils { public static Strin ...
- PHP结合Ueditor并修改图片上传路径 微信小程序 拼接域名显示图片
前言 在使用UEditor编辑器时,一般我们都是需要修改默认的图片上传路径的,下面是我整理好的修改位置和方法供大家参考. 操作 Ueditor PHP版本本身自带了一套上传程序,我们可以在此基础中,找 ...
- 七牛整合PHP上传文件
七牛支持抓取远程图片 API,用 access_key + secret_key + url 生成 access_token, 把 access_token 加在 header 里,然后向 post ...
- 七牛整合php上传从微信下载接口下载下来的文件
因为ios系统直接读取不了MP3格式的文件,所以从微信接口下载下来的MP3格式音频上传到七牛后要转码. Sample code: public function doMobileUploadT ...
- iOS 七牛多张图片上传
-(void)uploadImages:(NSArray *)images atIndex:(NSInteger)index token:(NSString *)token uploadManager ...
- Android开发中使用七牛云存储进行图片上传下载
Android开发中的图片存储本来就是比较耗时耗地的事情,而使用第三方的七牛云,便可以很好的解决这些后顾之忧,最近我也是在学习七牛的SDK,将使用过程在这记录下来,方便以后使用. 先说一下七牛云的存储 ...
随机推荐
- @OutputCache 详解-文章目录
OutputCache概念学习 OutputCache属性详解(一)一Duration.VaryByParam OutputCache属性详解(二)一 Location OutputCache属性详解 ...
- TSQL “匹配全部”语义的实现
在TSQL中,有exists子句表示存在,表示匹配任意一行数据,但是,如何表示匹配全部的数据行.例如,表示一个学生选修了所有课程,这就是“匹配全部”语义的一个经典实例. 示例,获取“选修全部”课程的学 ...
- 专业上的常用的工具和类库集 By 老衣
Visual Studio 2013 扩展 CodeMaid: 可快速整理代码文件,清理不必要的代码和杂乱的格式.并在开发时实时提供代码复杂度的报告,以便帮助开发人员降低代码复杂度.提高代码质量. C ...
- Sql Server系列:索引基础
1 索引概念 索引用于快速查找在某个列中某个特定值的行,不使用索引,数据库必须从第1条记录开始读完整个表,知道找出需要的行.表越大,查询数据所花费的时间越多.如果表中查询的列有索引,数据库能快速到达一 ...
- 解读sencha touch移动框架的核心架构(一)
sencha的前身就是Extjs了,sencha 框架是世界上第一个基于HTML5的Mobile App框架 那么何谓框架,传统软件工程对于库和框架的区分主要着眼于对应用运行流程的控制权,框架提供架构 ...
- 感恩回馈,新鲜出炉的《ASP.NET MVC 5框架揭秘》免费赠送
上次针对<ASP.NET Web API 2框架揭秘>举办了一次评论赠书活动,很多人问我相同的活动要不要针对<ASP.NET MVC 5框架揭秘>(阅读样章)再来一次,为此我向 ...
- ASP.NET WebAPi(selfhost)之文件同步或异步上传
前言 前面我们讲过利用AngularJs上传到WebAPi中进行处理,同时我们在MVC系列中讲过文件上传,本文结合MVC+WebAPi来进行文件的同步或者异步上传,顺便回顾下css和js,MVC作为客 ...
- jdk8中java.util.concurrent包分析
并发框架分类 1. Executor相关类 Interfaces. Executor is a simple standardized interface for defining custom th ...
- Python的安装和详细配置
Python是一种面向对象.解释型计算机程序设计语言.被认为是比较好的胶水语言.至于其他的,你可以去百度一下.本文仅介绍python的安装和配置,供刚入门的朋友快速搭建自己的学习和开发环境.本人欢迎大 ...
- jsonp协议原理深度解析
前言 今天在开发联调的过程中,需要跨域的获取数据,因为使用的jquery,当然使用dataType:'jsonp'就能够很easy的解决了.但是因为当时后端没有支持jsonp来访问,后来他在实现这个功 ...