iOS不支持WebP格式图片解决方案和iPhone 7及其后硬件拍照的HEIC格式图片

简介: iOS不支持WebP格式图片解决方案和iPhone 7及其后硬件拍照的HEIC格式图片

iOS不支持WebP格式图片解决方案:在阿里云的图片下载规则里配置为把WebP格式图片转换成png或 jpeg格式的图片。

今天我们遇到我们的苹果app和苹果上的微信端在加载有个用户的商品时,商品图片显示不出来,安卓app上可以显示。后来定位,那个用户传递的图片文件名后缀虽然是jpeg,但时其实是WebP格式的图片,safari也显示不了对应页面的图片,iOS不支持该格式的图片。这个是一张WebP格式的图片。

我们首先想到的是让苹果app支持WebP格式的图片。于是我们就遇到下面的新问题:想让WKWebView支持WebP格式的图片,最关键的问题时需要通过NSURLProtocol 协议截获WebP图片的请求(参考文章《iOS加载WebP格式图片小结》),若图片地址是以https:或http:开头,想拦截该图片地址的下载请求,就要注册http(s) scheme 来拦截。但是一旦注册 http(s) scheme 后,post 请求 body 数据被清空。咱们的页面有很多post请求需要传递参数。如增加收货地地址,图片上传。产生的新问题解决方案,参考文章WKWebView采用HybridNSURLProtocol协议拦截图片等资源预加载。想实现WKWebView支持WebP格式的图片。只能像图片上传时的图片预览那样,WebP图片地址是以yxLocalFile://开头。

具体解决方案是:注册自定义scheme,通过canInitWithRequest函数拦截指定图片资源下载地址,通过代理函数startLoading进一步识别图片资源下载地址,判断出是WebP格式的图片,可以文件后缀来识别,若上传时乱填文件后缀那就麻烦了。然后下载图片到本地,然后把WebP格式的图片转换成png或jpeg格式(为了保持图片质量和文件大小,压缩参数可以设置为0.7)的图片数据流(NSData对象)给页面显示。不过采用这种方法,就需要图像转换时间,该图片的缓存机制失效。

另一种解决方案是,在所有上传图片的时候(安卓app,苹果app,电脑端),判断是否是WebP,若是统一转换成png或 jpeg格式的图片再上传。

后来服务器后台进行了研究。发现我们图片的存储在阿里云上,可以通过设置图片下载时的配置规则实现把下载的WebP格式图片统一转换成png或 jpeg格式的图片。问题终于完满解决了。看来一个问题有很多解决方案,总有一个最解决完美的。是该谁解决就让谁解决,不是有解决方案就上,不考虑实现的复杂度和所产生的新问题及完美程度。


WebP简介

WebP格式,谷歌(google)开发的一种旨在加快图片加载速度的图片格式。图片压缩体积大约只有JPEG的2/3,并能节省大量的服务器宽带资源和数据空间。Facebook Ebay等知名网站已经开始测试并使用WebP格式。

WebP既支持有损压缩也支持无损压缩。相较编码JPEG文件,编码同样质量的WebP文件需要占用更多的计算资源。

桌面版Chrome可打开WebP格式。

去年10月份Google宣布了一种新的图片格式WebP,它可以将图片大小减少40%,目的是替代当前的图片标准JPEG,今天Google开发者宣布了WebP图片格式的一些改进,加入了透明格式支持,所以它同样也想取代掉PNG格式。

第一个版本的WebP采用有损压缩,所以用户想要图片体积小必须牺牲一些图片质量,今天的升级引进了“无损压缩”,意味着用户不需要牺牲图片质量就能够获得小体积的图片。Google开发团队说WebP比JPEG的压缩率高25%-34%,相比于PNG图片(需要透明时会使用这种格式),即便是最高的压缩,WebP也比它小28%,并且大部分网站不会采用这种压缩方式。下面的例子中,WebP图片比PNG图片小45%,就是说从网页中加载图片时,WebP比PNG快45%。然而,目前只有Chrome、Opera浏览器和Android 4.0默认浏览器本地原生支持WebP图片格式,所以要想成为标准Google还有很长的路要走。对于Google开发团队来说,想把它打造成新的Web标准的路很艰难,但是它的优势也很明显:图片体积小 = 互联网速度更快。

HEIC是iOS 11更新后,iPhone 7及其后硬件,在拍摄照片时的默认图像存储格式。

HEIC是一种图像格式,上线时间还比较短,只有4年左右。自iOS 11和macOS High Sierra(10.13)内测开始,苹果将HEIC设置为图片存储的默认格式。

与JPG相比,它占用的空间更小,画质更加无损。

HEIC格式照片支持iOS11及macOS High Sierra(10.13)及更新版本。

但是此种格式是无法在Windows 中直接使用看图软件打开的(Windows10 RS4开始支持该格式)。

所以如果想要在电脑中查看HEIC图片,最好使用在线免费HEIC图片转换应用,将HEIC转JPG,这样就可以在PC上打开iPhone HEIC照片了。HEIC可是连iphone4,5,6都不支持的图片格式,不知道苹果为何推出连自己的产品都不完全支持的图片格式干什么,徒给我们码农添麻烦。落下一地的鸡毛,现在还要给他们擦屁股。看来想推广一种图片格式没有那么容易,可能开源图片压缩算法并且承诺永久免费可能好些。现在缺的不是图片压缩的技术,而是没有革命性的改进,不得不使用的技术,谁会劳民伤财的迁就你按你的来采用你的新格式。怎么让iPhone 7及其后手机拍照不变成HEIC格式 HEIC格式改回JPG格式。在线把HEIC和WebP格式图片转换成JPG格式图片,不过你别自己乱修改文件后缀,防止它识别不出来源图片文件。


目录
相关文章
|
6月前
|
存储 Android开发 iOS开发
iOS不支持HEIC格式的图片显示和标签函数显示问题及解决方案
iOS不支持HEIC格式的图片显示和标签函数显示问题及解决方案
181 0
|
3月前
|
测试技术 虚拟化 iOS开发
iOS自动化测试方案(二):Xcode开发者工具构建WDA应用到iphone
这篇文章是iOS自动化测试方案的第二部分,详细介绍了在Xcode开发者工具中构建WebDriverAgent(WDA)应用到iPhone的全过程,包括环境准备、解决构建过程中可能遇到的错误,以及最终成功安装WDA到设备的方法。
169 0
iOS自动化测试方案(二):Xcode开发者工具构建WDA应用到iphone
|
3月前
|
BI Linux 数据安全/隐私保护
忘了 iOS(iPad、IPhone) 设备上的「屏幕使用时间」密码怎么办?找回屏幕密码
忘了 iOS(iPad、IPhone) 设备上的「屏幕使用时间」密码怎么办?找回屏幕密码
104 0
|
6月前
|
移动开发 网络协议 Linux
We discovered one or more bugs in your app when reviewed on iPhone and iPad running iOS 14.1
We discovered one or more bugs in your app when reviewed on iPhone and iPad running iOS 14.1
61 0
|
5天前
|
编解码 测试技术 iOS开发
iPhone 屏幕尺寸和开发适配
【10月更文挑战第23天】iPhone 的屏幕尺寸变化给开发者带来了一定的挑战,但也为创新提供了机遇。通过深入了解不同屏幕尺寸的特点,遵循适配原则和策略,运用合适的技巧和方法,我们能够为用户提供在不同 iPhone 机型上都具有良好体验的应用。在未来,随着技术的不断进步,我们还需要持续学习和适应,以满足用户对优质应用体验的不断追求。
|
5天前
|
编解码 iOS开发 UED
响应式设计在 iPhone 开发适配中的具体应用
【10月更文挑战第23天】响应式设计在 iPhone 开发适配中扮演着至关重要的角色,它能够帮助我们打造出适应不同屏幕尺寸和用户需求的高质量应用。通过合理运用响应式设计的原则和方法,我们可以在提供良好用户体验的同时,提高开发效率和应用的可维护性。
|
3月前
|
数据采集 iOS开发 Python
Chatgpt教你开发iPhone风格计算器,Python代码实现
Chatgpt教你开发iPhone风格计算器,Python代码实现
|
Shell iOS开发
iOS逆向:tweak开发教程(iPhone/tool)
iOS逆向:tweak开发教程(iPhone/tool)
1133 0
iOS逆向:tweak开发教程(iPhone/tool)
|
编解码 iOS开发
iphone 开发的基本入门知识
iphone 开发的基本入门知识
229 0
「镁客早报」iPhone或将在今年采用三摄;传Facebook致力于开发语音助力服务与亚马逊、苹果竞争
亚马逊向美国Alexa设备推免费音乐服务;视频会议软件开发商Zoom纳斯达克上市。
265 0