当前位置: 首页 > news >正文

ios-AVIF

我们来详细介绍一下 AVIF(AV1 Image File Format),这是一种比 WebP 更先进、压缩效率更高的图片格式。

一、AVIF 是什么?

AVIF 是基于 AV1 视频编解码器的一种现代图片格式。AV1 是由开放媒体联盟(Alliance for Open Media, AOMedia)开发的免费、开源的视频编码标准,旨在提供比 H.265/HEVC 更高的压缩效率。AVIF 则将 AV1 的帧内编码技术应用于静态图像,从而实现了卓越的压缩性能。

二、AVIF 的核心优势

AVIF 在很多方面都优于 WebP 和传统的 JPEG/PNG 格式:

  1. 更高的压缩效率:这是 AVIF 最大的亮点。
    • 与 JPEG 相比:在相同的视觉质量下,AVIF 文件大小通常比 JPEG 小 50% 以上。
    • 与 WebP 相比:在相同的视觉质量下,AVIF 文件大小通常比 WebP 小 20-30%
  2. 支持更丰富的特性
    • 高动态范围(HDR):AVIF 原生支持 HDR 图像,能够存储更广泛的亮度和色彩信息,呈现更逼真的画质。
    • 宽色域(WCG):支持如 P3 这样的宽色域,色彩表现更丰富。
    • 深度图:可以包含深度信息,用于创建视差效果或支持 AR/VR 应用。
    • 动画:支持多帧动画,功能类似 GIF 和 WebP 动画,但压缩效率更高。
    • Alpha 透明通道:像 PNG 和 WebP 一样支持透明。

三、AVIF 在 iOS 开发中的应用

与 WebP 类似,AVIF 在 iOS 开发中的主要应用场景是:

  1. 作为 App 内资源:将 App 中的静态图片资源转换为 AVIF 格式,可以比 WebP 更进一步地减小 .ipa 包体积。
  2. 作为网络图片:从服务器加载 AVIF 格式的图片,可以显著减少网络传输数据量,加快加载速度,尤其适用于图片密集型应用。

四、iOS 中如何使用 AVIF?

iOS 对 AVIF 的原生支持始于 iOS 16

1. iOS 16+ 原生支持

加载本地 AVIF 文件:

你可以直接使用 UIImage(named:) 或 UIImage(contentsOfFile:) 来加载 AVIF 图片。

swift

// 从 Asset Catalog 加载
if let avifImage = UIImage(named: "my_image.avif") {imageView.image = avifImage
}// 从文件路径加载
if let imagePath = Bundle.main.path(forResource: "my_image", ofType: "avif"),let avifImage = UIImage(contentsOfFile: imagePath) {imageView.image = avifImage
}

加载网络 AVIF 图片:

使用 URLSession 下载后,直接通过 UIImage(data:) 初始化。

swift

let url = URL(string: "https://example.com/image.avif")!URLSession.shared.dataTask(with: url) { data, response, error inif let data = data, let avifImage = UIImage(data: data) {DispatchQueue.main.async {self.imageView.image = avifImage}}
}.resume()

注意:在 Info.plist 中添加 NSAppTransportSecurity -> NSAllowsArbitraryLoads 为 YES(不推荐),或者为特定域名添加例外,以允许 HTTP 加载。推荐使用 HTTPS。

Asset Catalog 支持:

你可以直接将 .avif 文件拖入 Assets.xcassets 中,Xcode 会像处理其他图片格式一样处理它。

2. 兼容 iOS 16 以下版本

如果你的 App 需要支持 iOS 15 或更低版本,就不能使用原生的 AVIF 支持。这时,你需要借助第三方库。

主流第三方库:

  • libavif:这是 AVIF 格式的官方参考实现库。你需要将其集成到项目中,并使用它来解码 AVIF 数据。
  • SDWebImageAVIFCoder:这是 SDWebImage 框架的一个插件,提供了 AVIF 解码支持。它内部也是基于 libavif 构建的。

使用 SDWebImageAVIFCoder 示例:

  1. 安装:通过 CocoaPods: pod 'SDWebImageAVIFCoder'

  2. 使用

swift

import SDWebImage
import SDWebImageAVIFCoder// 1. 注册 AVIF 解码器
let avifCoder = SDImageAVIFCoder.shared
SDImageCodersManager.shared.addCoder(avifCoder)// 2. 像平常一样使用 SDWebImage 加载图片
// 它会自动检测图片格式并使用相应的解码器
imageView.sd_setImage(with: URL(string: "https://example.com/image.avif"))

五、注意事项

  1. 兼容性
    • iOS 16+:完全原生支持。
    • iOS < 16:必须使用第三方库(如 SDWebImageAVIFCoder)进行兼容。由于 AVIF 相对较新,在需要广泛兼容旧设备的项目中,采用需谨慎。
  2. 设计与转换
    • 设计师提供的图片资源需要转换为 AVIF。
    • 推荐工具
      • Squoosh:Google 官方的在线图片压缩工具,支持 AVIF 格式。
      • avifenclibavif 库提供的命令行工具,适合批量转换。
      • Photoshop 插件:可以安装 AVIF 插件(如 AVIF Photoshop Plug-in)来导出 AVIF。
  3. 编码 / 解码性能
    • AVIF 采用的 AV1 算法压缩率更高,但这也意味着编码(生成图片)和解码(加载图片)所需的计算资源更多。在性能较低的设备上,大量加载 AVIF 图片可能会对 CPU 造成一定压力。不过,对于现代 iOS 设备,这通常不是问题。
  4. 服务器支持(网络图片场景)
    • 服务器需要能够生成并返回 AVIF 格式的图片。目前,越来越多的 CDN 和图片服务提供商开始支持 AVIF。

六、WebP 与 AVIF 对比及选择建议

特性WebPAVIF
压缩效率更高
iOS 原生支持iOS 14+iOS 16+
特性丰富度支持有损、无损、透明、动画支持有损、无损、透明、动画、HDR宽色域
生态成熟度较高,应用广泛新兴,生态正在快速发展
解码性能较好略逊(计算复杂度高)

选择建议:

  • 如果你的 App 最低支持 iOS 16+强烈推荐优先考虑 AVIF。它能提供最佳的压缩效率,尤其是对于需要展示高质量图片的应用。
  • 如果你的 App 支持 iOS 14+ 但需要兼容 iOS 15WebP 是更稳妥的选择。它在压缩效率和兼容性之间取得了很好的平衡,并且生态系统非常成熟。你也可以考虑对 iOS 16+ 用户提供 AVIF,对低版本用户提供 WebP 的降级方案。
  • 如果你的 App 需要支持 iOS 13 或更低版本WebP 是唯一的现代选择(需配合 SDWebImage)。

总结

AVIF 代表了图片格式的未来发展方向,提供了无与伦比的压缩效率和丰富的功能。在 iOS 开发中,它是继 WebP 之后又一个强大的包体积优化和网络性能优化工具。根据你的项目兼容性要求,选择合适的图片格式将为用户带来更快的下载速度和更好的体验

http://www.dtcms.com/a/604860.html

相关文章:

  • 360网站建设公司哪家好石家庄有哪些互联网公司
  • 单机并发简介
  • 自相关实操流程
  • java基础-集合接口(Collection)
  • 基于中国深圳无桩共享单车数据的出行目的推断与时空活动模式挖掘
  • 【Rust】通过系统编程语言获取当前系统内存、CPU等运行情况,以及简单实现图片采集并设置系统壁纸
  • 【计算思维】蓝桥杯STEMA 科技素养考试真题及解析 D
  • 智能合同系统,如何为企业合同管理保驾护航?
  • 基于Rust实现爬取 GitHub Trending 热门仓库
  • 深圳市建设局官方网站曼联对利物浦新闻
  • 【Android 组件】实现数据对象的 Parcelable 序列化
  • CrowdDiff: 使用扩散模型进行多假设人群密度估计
  • 同创企业网站源码wordpress自定义简单注册
  • 在 Android ARM64 上运行 x86_64 程序
  • 幽冥大陆(二十)屏幕录像特效增加节目效果——东方仙盟炼气期
  • 类加载机制、生命周期、类加载器层次、JVM的类加载方式
  • 数据智能开发五 技术架构
  • 免费的app软件下载网站个人网站备案 法律说明
  • MFC Check Box控件完全指南:属性设置、样式定制与高级应用
  • 广州 网站 建设支付网站建设费入什么科目
  • 西宁做网站需要多少钱wordpress怎么安装模板
  • 网站标题优化工具外贸公司电话
  • 北京北排建设公司招标网站wordpress登陆过程
  • 怎么免费做个人网站建设银行网站怎么打印明细
  • 在线设计图片网站总结郑州app拉新项目
  • 网站建设春节放假番禺免费核酸检测
  • preec网站电子商务seo实训总结
  • 优化网站浏览量怎么看网站建设方案评标原则
  • 网站设计职业工作室打开网站搜索
  • 网站建设方案书 doc织梦修改网站背景颜色