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格式图片,不过你别自己乱修改文件后缀,防止它识别不出来源图片文件。


目录
相关文章
|
3月前
|
iOS开发 开发者
解决xcode doesn‘t support iphone’s ios 14.6 (18f72)
解决xcode doesn‘t support iphone’s ios 14.6 (18f72)
260 3
|
6天前
|
存储 编解码 算法
发到朋友圈的图片为什么会变糊?iPhone的live实况图是什么格式的图片?
本文介绍了iPhone Live实况图的格式(.livp)、社交平台图片变糊的原因、图像编码压缩的基本过程(变换、量化、熵编码),以及HEIF格式及其与HEVC的关系。HEIF格式具有体积小、颜色丰富、内容灵活等优势,适用于高效图像存储与传输。
|
3月前
|
测试技术 虚拟化 iOS开发
iOS自动化测试方案(二):Xcode开发者工具构建WDA应用到iphone
这篇文章是iOS自动化测试方案的第二部分,详细介绍了在Xcode开发者工具中构建WebDriverAgent(WDA)应用到iPhone的全过程,包括环境准备、解决构建过程中可能遇到的错误,以及最终成功安装WDA到设备的方法。
182 0
iOS自动化测试方案(二):Xcode开发者工具构建WDA应用到iphone
|
3月前
|
BI Linux 数据安全/隐私保护
忘了 iOS(iPad、IPhone) 设备上的「屏幕使用时间」密码怎么办?找回屏幕密码
忘了 iOS(iPad、IPhone) 设备上的「屏幕使用时间」密码怎么办?找回屏幕密码
112 0
|
6月前
按钮的image图片是非圆角,直接对UIButton设置圆角,iOS13系统没有圆角效果的问题及解决方案
按钮的image图片是非圆角,直接对UIButton设置圆角,iOS13系统没有圆角效果的问题及解决方案
49 0
|
18天前
|
编解码 测试技术 iOS开发
iPhone 屏幕尺寸和开发适配
【10月更文挑战第23天】iPhone 的屏幕尺寸变化给开发者带来了一定的挑战,但也为创新提供了机遇。通过深入了解不同屏幕尺寸的特点,遵循适配原则和策略,运用合适的技巧和方法,我们能够为用户提供在不同 iPhone 机型上都具有良好体验的应用。在未来,随着技术的不断进步,我们还需要持续学习和适应,以满足用户对优质应用体验的不断追求。
|
18天前
|
编解码 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)
1159 0
iOS逆向:tweak开发教程(iPhone/tool)
|
编解码 iOS开发
iphone 开发的基本入门知识
iphone 开发的基本入门知识
232 0