1:最近项目中遇到一个这样的问题,iOS 手机上传图片,发现我上传到后台的照片在后台不回显示,为什么呢?明明图片数据已经上产到后台并且有成功的数据返回,难道是假的?
2:找到测试进行沟通
先复现问题吧,测试说拍照和选择都是可以的,有时选择的不一样,经过复现,确实是有问题(这个地应该给我们的测试一个赞的),这个可以选择的照片是他自己拍摄的,哦,想起来了【将iPhone 更新到新版的iOS 11,可能会发现拍照时会自动存档成副文件名为.heic 或.heif 的文件】,果然查看测试的手机,7p 并且系统 11. 这个问题很明显是数据不兼容造成的,但是后台同事不明了,明明我们限制了格式,为什么还上传成功了呢?
3:后来经过后台同事多次尝试App可以上传成功但是用接口上传同样的数据是不成功的,也就是问题出在App,兜兜转转问题又回来了,我还是老老实实的解决问题吧,
4:经过调查代码逻辑,回传显示的图片,App 只对gif 做了特殊处理,没有兼容该模式,上手处理,抓数据,图片从底层返回的类型是:public.heic
针对这个做特殊处理(原来想不做处理),但是转念一想,作为聊天类软件,用户上传一张图片都无法上传是不是有点坑?好吧继续处理吧
5: 其实解决办法很简单:做个选择照片的回调将这种格式的照片转化成JPEG格式的照片 然后上传
代码如下:
let cimage = CIImage.init(image: image)
letcontext =CIContext()
if#available(iOS10.0, *) {
letdataImage = context.jpegRepresentation(of: cimage!, colorSpace: (cimage?.colorSpace)!, options: [:])
letnewimage =UIImage(data:dataImage!)
imageMimeTypes.append("image/jpeg")
ImageCache.default.store(newimage!, original: dataImage, forKey: cacheKey, toDisk:true)
imageDatas.append(dataImage!)
images.append(image)
补充:为什么苹果要出一个新的图片格式?
高效率图片格式(High Efficiency Image File Format, HEIF)」的图片是一种新的文件格式(影片则为HEVC 高效率视讯编码),除了保留较多较完整的画面细节之外档案还更小一些,能减轻照片太占储存空间的问题,避免手机很快被塞爆。
此外HEIF 文件能同时存放多张图像及其缩图并支持连拍相片、同时储存静态照片与动态影片(录影时拍照)、支援焦点堆叠和曝光堆叠并能整合其他文字或音讯资料在同一个档案中且能同时播放。
使用HEIF 格式其实是有很多好处的,不过并不是每个人的手机或电脑都能支持这类文件,如果你常常需要跟其他人分享你拍的照片又不希望造成其他人的困扰,可依本文的方法将iPhone 预设的拍照格式改回相容性较高、全部人都能直接开的JPEG 格式。
贡献者
轻易科技研发中心 移动研发中心 张盖