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应用开发中的跨平台解决方案
【10月更文挑战第42天】在移动应用开发的广阔天地中,安卓和iOS系统如同两座巍峨的山峰,分别占据着半壁江山。开发者们在这两座山峰之间穿梭,努力寻找一种既能节省资源又能提高效率的跨平台开发方案。本文将带你走进跨平台开发的世界,探讨各种解决方案的优势与局限,并分享一些实用的代码示例,助你在应用开发的道路上更加游刃有余。
|
7月前
|
开发框架 移动开发 Android开发
安卓与iOS开发中的跨平台解决方案:Flutter入门
【9月更文挑战第30天】在移动应用开发的广阔舞台上,安卓和iOS两大操作系统各自占据半壁江山。开发者们常常面临着选择:是专注于单一平台深耕细作,还是寻找一种能够横跨两大系统的开发方案?Flutter,作为一种新兴的跨平台UI工具包,正以其现代、响应式的特点赢得开发者的青睐。本文将带你一探究竟,从Flutter的基础概念到实战应用,深入浅出地介绍这一技术的魅力所在。
190 7
|
8月前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台解决方案
【9月更文挑战第27天】在移动应用开发的广阔天地中,安卓和iOS两大操作系统如同双子星座般耀眼。开发者们在这两大平台上追逐着创新的梦想,却也面临着选择的难题。如何在保持高效的同时,实现跨平台的开发?本文将带你探索跨平台开发的魅力所在,揭示其背后的技术原理,并通过实际案例展示其应用场景。无论你是安卓的忠实拥趸,还是iOS的狂热粉丝,这篇文章都将为你打开一扇通往跨平台开发新世界的大门。
178 8
|
9月前
|
测试技术 开发工具 iOS开发
iOS自动化测试方案(三):WDA+iOS自动化测试解决方案
这篇文章是iOS自动化测试方案的第三部分,介绍了在没有MacOS系统条件下,如何使用WDA(WebDriverAgent)结合Python客户端库facebook-wda和tidevice工具,在Windows系统上实现iOS应用的自动化测试,包括环境准备、问题解决和扩展应用的详细步骤。
916 1
iOS自动化测试方案(三):WDA+iOS自动化测试解决方案
|
9月前
|
前端开发 开发工具 Android开发
探索安卓与iOS应用开发:跨平台解决方案的崛起
【8月更文挑战第27天】在移动设备日益普及的今天,安卓和iOS系统占据了市场的主导地位。开发者们面临着一个重要问题:是选择专注于单一平台,还是寻找一种能够同时覆盖两大系统的解决方案?本文将探讨跨平台开发工具的优势,分析它们如何改变了移动应用的开发格局,并分享一些实用的开发技巧。无论你是新手还是资深开发者,这篇文章都将为你提供有价值的见解和建议。
|
9月前
|
测试技术 虚拟化 iOS开发
iOS自动化测试方案(二):Xcode开发者工具构建WDA应用到iphone
这篇文章是iOS自动化测试方案的第二部分,详细介绍了在Xcode开发者工具中构建WebDriverAgent(WDA)应用到iPhone的全过程,包括环境准备、解决构建过程中可能遇到的错误,以及最终成功安装WDA到设备的方法。
487 0
iOS自动化测试方案(二):Xcode开发者工具构建WDA应用到iphone
|
9月前
|
前端开发 JavaScript Android开发
安卓与iOS开发中的跨平台解决方案
【8月更文挑战第24天】在移动应用开发领域,安卓和iOS两大平台占据了主导地位。然而,为这两个平台分别开发和维护应用会带来额外的时间和成本。本文将探讨跨平台开发的概念、优势以及流行的跨平台框架,如React Native和Flutter,并分析它们如何解决多平台开发的挑战。
|
6月前
|
编解码 测试技术 iOS开发
iPhone 屏幕尺寸和开发适配
【10月更文挑战第23天】iPhone 的屏幕尺寸变化给开发者带来了一定的挑战,但也为创新提供了机遇。通过深入了解不同屏幕尺寸的特点,遵循适配原则和策略,运用合适的技巧和方法,我们能够为用户提供在不同 iPhone 机型上都具有良好体验的应用。在未来,随着技术的不断进步,我们还需要持续学习和适应,以满足用户对优质应用体验的不断追求。
|
6月前
|
编解码 iOS开发 UED
响应式设计在 iPhone 开发适配中的具体应用
【10月更文挑战第23天】响应式设计在 iPhone 开发适配中扮演着至关重要的角色,它能够帮助我们打造出适应不同屏幕尺寸和用户需求的高质量应用。通过合理运用响应式设计的原则和方法,我们可以在提供良好用户体验的同时,提高开发效率和应用的可维护性。
|
9月前
|
数据采集 iOS开发 Python
Chatgpt教你开发iPhone风格计算器,Python代码实现
Chatgpt教你开发iPhone风格计算器,Python代码实现
90 1