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


目录
相关文章
|
1月前
|
存储 缓存 编解码
实现iOS平台的高效图片缓存策略
【4月更文挑战第23天】在移动应用开发领域,尤其是图像处理密集型的iOS应用中,高效的图片缓存策略对于提升用户体验和节省系统资源至关重要。本文将探讨一种针对iOS平台设计的图片缓存方案,该方案通过结合内存缓存与磁盘缓存的多层次结构,旨在优化图片加载性能并降低内存占用。我们将深入分析其设计理念、核心组件以及在实际场景中的应用效果,同时对比其他常见缓存技术的优势与局限。
|
1月前
按钮的image图片是非圆角,直接对UIButton设置圆角,iOS13系统没有圆角效果的问题及解决方案
按钮的image图片是非圆角,直接对UIButton设置圆角,iOS13系统没有圆角效果的问题及解决方案
20 0
|
1月前
|
移动开发 网络协议 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
25 0
|
1天前
|
iOS开发 开发者 容器
探索iOS开发中的SwiftUI框架
【6月更文挑战第21天】本文深入探讨了苹果在iOS开发中推出的SwiftUI框架,旨在为开发者提供一种声明式、更简洁的界面设计方法。文章首先概述了SwiftUI的核心概念和优势,接着通过一个天气预报应用实例,详细讲解了如何使用SwiftUI进行布局和用户界面的设计。此外,还讨论了SwiftUI与UIKit的差异,以及如何将SwiftUI集成到现有的项目中。最后,文章展望了SwiftUI的未来发展方向,包括潜在的改进和新特性。
|
1天前
|
Java 开发工具 Android开发
安卓与iOS开发差异解析
【6月更文挑战第21天】本文旨在深入探讨安卓和iOS两大移动操作系统在应用开发过程中的主要差异。通过对比分析,揭示各自的设计哲学、编程语言选择、用户界面构建、性能优化策略以及发布流程的异同。文章将提供开发者视角下的实用信息,帮助他们更好地理解各自平台的特点和挑战,从而做出更明智的开发决策。
|
2天前
|
Java 开发工具 Android开发
探索安卓与iOS开发的核心差异
【6月更文挑战第20天】在移动应用开发的广阔天地中,安卓和iOS两大平台各自占据半壁江山。本文将深入探讨这两大操作系统在开发过程中的主要区别,包括编程语言、开发工具、用户界面设计哲学、系统架构以及市场分布等方面。通过对这些关键差异的分析,旨在为开发者提供一份实用的指南,帮助他们在面对项目决策时,能够更加明智地选择合适的平台,并针对特定平台优化他们的应用。
|
2天前
|
开发工具 Android开发 iOS开发
探索安卓与iOS开发的差异:从工具到用户体验
【6月更文挑战第20天】在移动应用开发的广阔天地中,安卓和iOS两大平台各自占据半壁江山。本文将深入探讨这两个操作系统在开发环境、编程语言、用户界面设计以及性能优化等方面的关键差异。我们将通过比较分析,揭示各自平台的独特优势和面临的挑战,为开发者提供决策参考,并为最终用户提供更深层次的用户体验洞察。
|
4天前
|
Java Android开发 Swift
探索Android与iOS开发的差异:平台选择对项目成功的影响
【6月更文挑战第18天】在移动应用开发的广阔天地中,Android和iOS两大平台各据一方,它们在市场份额、用户群体及开发环境上各有千秋。本文将深入分析这两个操作系统的开发差异,探讨如何根据项目需求选择合适的平台,并讨论跨平台解决方案的可行性与挑战。我们将通过实际案例,揭示平台选择对项目成功的关键性影响,为开发者提供决策支持。
|
4天前
|
Swift iOS开发 开发者
探索iOS开发中的SwiftUI框架
在苹果的生态系统中,SwiftUI代表了iOS应用开发的一次重大飞跃。作为一项现代化的UI工具集,它旨在简化和加速界面设计过程,同时确保代码的清晰度与可维护性。本文将深入探讨SwiftUI的核心概念、优势以及在实际开发中的应用案例,为开发者提供全面而实用的指南。
|
5天前
|
安全 IDE Android开发
探索Android与iOS开发的差异:平台特性与编程实践
【6月更文挑战第17天】在移动应用开发的广阔天地中,Android和iOS两大平台各自占据半壁江山。它们在用户群体、系统架构以及开发环境上的差异,为开发者带来了不同的挑战和机遇。本文深入探讨了这两个平台在技术实现、界面设计、性能优化等方面的主要区别,并提供了实用的开发建议,旨在帮助开发者更好地理解各自平台的特性,从而创造出更加优秀的移动应用。