【图片引用方向纠正】直接在图片后面添加

?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的理解的更多相关文章

  1. 七牛:关于图片 EXIF 信息中旋转参数 Orientation 的理解

    EXIF(Exchangeable Image File)是 “可交换图像文件” 的缩写,当中包含了专门为数码相机的照片而定制的元数据,可以记录数码照片的拍摄参数.缩略图及其他属性信息,简单来说,Ex ...

  2. 图片上传并显示(兼容ie),图片大小判断

    图片上传并显示(兼容ie),图片大小判断 HTML <div id="swf" style="margin: 0 auto;text-align: center;& ...

  3. 【转载】【JAVA秒会技术之图片上传】基于Nginx及FastDFS,完成图片的上传及展示

    基于Nginx及FastDFS,完成商品图片的上传及展示 一.传统图片存储及展示方式 存在问题: 1)大并发量上传访问图片时,需要对web应用做负载均衡,但是会存在图片共享问题 2)web应用服务器的 ...

  4. spring boot图片上传至远程服务器并返回新的图片路径

    界面上传图片时考虑到可能会有用户的图片名称一致,使用UUID来对图片名称进行重新生成. //UUIDUtils public class UUIDUtils { public static Strin ...

  5. PHP结合Ueditor并修改图片上传路径 微信小程序 拼接域名显示图片

    前言 在使用UEditor编辑器时,一般我们都是需要修改默认的图片上传路径的,下面是我整理好的修改位置和方法供大家参考. 操作 Ueditor PHP版本本身自带了一套上传程序,我们可以在此基础中,找 ...

  6. 七牛整合PHP上传文件

    七牛支持抓取远程图片 API,用 access_key + secret_key + url 生成 access_token, 把 access_token 加在 header 里,然后向 post ...

  7. 七牛整合php上传从微信下载接口下载下来的文件

    因为ios系统直接读取不了MP3格式的文件,所以从微信接口下载下来的MP3格式音频上传到七牛后要转码.   Sample code:   public function doMobileUploadT ...

  8. iOS 七牛多张图片上传

    -(void)uploadImages:(NSArray *)images atIndex:(NSInteger)index token:(NSString *)token uploadManager ...

  9. Android开发中使用七牛云存储进行图片上传下载

    Android开发中的图片存储本来就是比较耗时耗地的事情,而使用第三方的七牛云,便可以很好的解决这些后顾之忧,最近我也是在学习七牛的SDK,将使用过程在这记录下来,方便以后使用. 先说一下七牛云的存储 ...

随机推荐

  1. iOS-Xcode使用技巧

    一.快捷键的使用 经常用到的快捷键如下: 新建 shift + cmd + n     新建项目 cmd + n             新建文件 视图 option + cmd + 回车 打开助理编 ...

  2. python django基础(一)

    Django简介:Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的框架模式,即模型M,视图V和控制器C.不过在Django实际使用中,Django更关注的是模型(Mod ...

  3. Sql Server系列:数据库对象

    数据库对象是数据库的组成部分,数据表.视图.索引.存储过程以及触发器等都是数据库对象. 数据库的主要对象是数据表,数据表是一系列二维数组的集合,用于存储各种信息. 视图表面上看与表几乎一样,具有一组命 ...

  4. php继承多态

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. Web APi之手动实现JSONP或安装配置Cors跨域(七)

    前言 照理来说本节也应该讲Web API原理,目前已经探讨完了比较底层的Web API消息处理管道以及Web Host寄宿管道,接下来应该要触及控制器.Action方法,以及过滤器.模型绑定等等,想想 ...

  6. 瀑布流StaggeredGridView 下拉刷新

    1.项目中用到了瀑布流,之前用的是PinterestLikeAdapterView这个控件  然后上拉加载更多跟下拉刷新用的是XListView ,但是加载更多或者下拉刷新的时候闪屏,对用户体验很不好 ...

  7. 关于skip_name_resolve参数的总结

    作为MySQL调优的一部分,很多人都推荐开启skip_name_resolve.这个参数是禁止域名解析的(当然,也包括主机名).很多童鞋会好奇,这背后的原理是什么,什么情况下开启这个参数比较合适. 基 ...

  8. PHP环境配置-从Apache官网下载windows版apache服务器

    由于个人有强迫倾向,下载软件都喜欢从官网下载,摸索了好久终于摸清楚怎么从Apache官网下载windows安装版的Apache服务器了,现在分享给大家. 进入apache服务器官网http://htt ...

  9. Oracle库Delete删除千万以上普通堆表数据的方法

    需求:Oracle数据库delete删除普通堆表千万条历史记录. 直接删除的影响: 1.可能由于undo表空间不足从而导致最终删除失败的问题: 2.可能导致undo表空间过度使用,影响到其他用户正常操 ...

  10. jdk线程池主要原理

    本文转自:http://blog.csdn.net/linchengzhi/article/details/7567397 正常创建一个线程的时候,我们是这样的:new thread(Runnable ...