你的位置:首页 > Java教程

[Java教程]七牛


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

?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信息为准