A V I F是啥?

AVIF 是一种最近的文件格式,在本文撰写之时,已经得到了 Microsoft Edge 的支持,从而获得了重要的浏览器支持。

!重要提示:我们不再处于黑暗时代,大多数大型 Web 平台通常支持当前版本的浏览器的最新 1 年版本。您可以开始使用 AVIF 与 WebP 回退(回退仅在 2024 年底之前是必要的)

这意味着什么?

您现在可以将 AVIF “主要”用作默认栅格图像,因为它本质上取代了许多常见的 JPEG 使用。

为什么是 AVIF 而不是 JPEG 和 WEBP?

  • 压缩效率:与 JPEG 和 WebP 等格式相比,在保留高图像质量的同时,具有更高的压缩比。
  • 色彩深度:支持广泛的色彩深度,包括 8 位、10 位、12 位和 16 位。
  • 广色域和 HDR 支持: AVIF 实现了丰富多彩和栩栩如生的图像,具有广泛的颜色和高动态范围 (HDR)。非常适合对色彩和细节要求精确的应用,例如专业摄影和媒体内容。
  • 无损和有损压缩:AVIF 的无损压缩远胜于压缩的位图和 PNG
  • Alpha 通道支持:与 PNG 一样,您现在可以以更好的压缩效果存储半透明图像。
  • 基于 AV1:AV1 是由 开放媒体联盟 开发的 免版税编解码器,基于谷歌的 VP9 编码。这意味着它将有广泛的采用,与其他即将推出的图像格式相比,争议要少得多。
  • 完整的主要浏览器和广泛的平台支持
  • 减少带宽并加快加载时间:较小的文件意味着用户的更快加载速度。

缺点

  • 计算密集型压缩:通常,AVIF 压缩在计算上比 JPEG 等较旧的图像格式更密集,但它通常可以达到卓越的压缩效率。

缩小了多少?

开放媒体联盟非常兴奋,他们声称:

“图像可以比相似视觉质量的 JPEG 小 10 倍。”

此外

AVIF 可以执行 40% 到 90% 的减少”

我使用 AVIF 已经大约 4 年,我认为我压缩的大多数图像的大小是相当质量 JPEG 输出图像大小的 60% 左右。这仍然令人震惊。

因此,AVIF 涵盖了大多数图像方案,例外情况:

  • 矢量:SVG 和 SVG 图像做得很好。
  • 向量动画:同样,SVG 在这里做得不错,希望渲染质量有更多选择,但嗯。

后端编码/解码

如果您没有在首选后端语言中找到支持 AVIF 的软件库,您可以封装 libavif,这是 AOMedia 官方编码器/解码器。或者,如果你很勇敢,你可以转换它以获得原生支持。

GitHub - AOMediaCodec/libavif: libavif - 用于编码和解码 .avif 文件的库

libavif - 用于编码和解码 .avif 文件的库 - GitHub - AOMediaCodec/libavif:libavif - Library for encoding…

github.com

在第一眼看到github上的一些。

  • Node.js:https://github.com/lovell/sharp
  • PHP:https://github.com/flyimg/flyimg
  • Go:https://github.com/webp-sh/webp_server_go

何时不使用 AVIF

这真的取决于图像的动态和复杂性,但通常:

  • 无损向量/非现实动画
  • 这取决于(呃)

与比较质量/压缩比时,有些“少见”的情况下,WebP 甚至 JPEG 可能会击败 AVIF。

经验法则是,当涉及到优化照片逼真图像时,AVIF 通常会大放异彩。我个人发现它在其他图像(如图表和 vecor 艺术)中也非常主要。

支持旧版浏览器

想象一下,有人刚从长假回来,他们已经有一段时间没有更新浏览器了。

如果您要在本文撰写时开始使用 AVIF,请使用 srcset 和或 <picture><source> 将 AVIF 与较旧的图像格式(如 WebP 或 JPEG)回退。

如果您已经超过了本文撰写时间的 Edge 的 3 个或更多版本,您可以很好地仅使用 src

动画

Animated AVIF Samples

这略微偏离了本文的范围,但如上所述,AVIF 可以用于动画,就像 APNG 一样。

两种格式都远远优于 GIF,您应该考虑它们作为替代品,因为它们具有完整的浏览器支持,而 GIF 是用于移动图像的过时格式,压缩效果很差。

也就是说,当涉及到电子邮件支持时要谨慎,因为这也是一个旧的和糟糕的系统,可能不会对这些新格式提供一致的支持,一定要检查。

结论

我尽量避免参与竞争的图像格式和首选压缩结果的观点。事实是,所有无损编解码器都是有代价的;这就是权衡。

您可能不喜欢特定图像伪影的样式,但如果这意味着有人可以在火车上或者在延迟不佳的情况下更快地加载您的网站,那么作为开发人员,您也必须做出妥协。

终极目标是在合理的范围内向用户提供最小的负载,尽管哪种格式被证明是更优的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/334901.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

禅道的使用及简介

目录 一.禅道简介1.1 禅道主要功能和特点1.2 禅道官网 二.安装禅道2.1 下载禅道开源版2.2.修改数据库密码 三.登录禅道四.禅道的使用4.1.添加部门权限4.2.添加用户权限4.3.公司名修改4.4、.权限 五.创建产品5.1.产品经理创建产品5.2.添加产品模块5.3.添加产品计划5.4.项目经理的…

TCP/IP 基础知识总结

要说我们接触计算机网络最多的协议&#xff0c;那势必离不开 TCP/IP 协议了&#xff0c;TCP/IP 协议同时也是互联网中最为著名的协议&#xff0c;下面我们就来一起聊一下 TCP/IP 协议。 TCP/IP 的历史背景 最初还没有 TCP/IP 协议的时候&#xff0c;也就是在 20 世纪 60 年代…

java8 列表通过 stream流 根据对象属性去重的三种实现方法

java8 列表通过 stream流 根据对象属性去重的三种实现方法 一、简单去重 public class DistinctTest {/*** 没有重写 equals 方法*/SetterGetterToStringAllArgsConstructorNoArgsConstructorpublic static class User {private String name;private Integer age;}/*** lombo…

服务注册流程解析

本文主要介绍服务注册的基本流程 起手式 接上面的继续说&#xff0c;服务注册是一门至高无上的武学&#xff0c;招式千变万化 &#xff0c;九曲十八弯打得你找不到北。可正所谓这顺藤摸瓜&#xff0c;瓜不好找&#xff0c;可是这藤长得地方特别显眼。那么今天&#xff0c;就让…

LLMs之Vanna:Vanna(利用自然语言查询数据库的SQL工具+底层基于RAG)的简介、安装、使用方法之详细攻略

LLMs之Vanna&#xff1a;Vanna(利用自然语言查询数据库的SQL工具底层基于RAG)的简介、安装、使用方法之详细攻略 目录 Vanna的简介 1、用户界面 2、RAG vs. Fine-Tuning 3、为什么选择Vanna&#xff1f; 4、扩展Vanna Vanna的安装和使用方法 1、安装 2、训练 (1)、使用…

航空飞行器运维VR模拟互动教学更直观有趣

传统的二手车鉴定评估培训模式存在实践性不强、教学样本不足、与实际脱节等一些固有的不足。有了VR虚拟仿真技术的加持&#xff0c;二手车鉴定评估VR虚拟仿真实训系统逐渐进入实训领域&#xff0c;为院校及企业二手车检测培训提供了全新的解决方案。 高职院校汽车专业虚拟仿真实…

手写Vue3源码

Vue3核心源码 B站视频地址&#xff1a;https://www.bilibili.com/video/BV1nW4y147Pd?p2&vd_source36bacfbaa95ea7a433650dab3f7fa0ae Monorepo介绍 Monorepo 是管理项目代码的一种方式&#xff0c;只在一个仓库中管理多个模块/包 一个仓库可以维护多个模块&#xff0c;…

鸿蒙开发系列教程(五)--ArkTS语言:组件开发

1、基础组件 组件API文档&#xff1a;https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V2/84_u58f0_u660e_u5f0f_u5f00_u53d1_u8303_u5f0f_uff09-0000001427744776-V2 查看组件API 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 容…

项目实战———苍穹外卖(DAY12)

课程内容 工作台 Apache POI 导出运营数据Excel报表 功能实现&#xff1a;工作台、数据导出 工作台效果图&#xff1a; 数据导出效果图&#xff1a; 在数据统计页面点击数据导出&#xff1a;生成Excel报表 1. 工作台 1.1 需求分析和设计 1.1.1 产品原型 工作台是系统运营…

SpringBoot的yml多环境配置3种方法

文章目录 SpringBoot的yml多环境配置3种方法1、多个yml文件1.1、创建多个配置文件applicaiton.yml中指定配置 2、单个yml文件3、在pom.xml中指定环境配置3.1、创建多个配置文件3.2、在application.yml中添加多环境配置属性3.3、在pom.xml中指定使用的配置3.4、问题&#xff1a;…

【论文阅读】GPT4Graph: Can Large Language Models Understand Graph Structured Data?

文章目录 0、基本介绍1、研究动机2、准备2.1、图挖掘任务2.2、图描述语言&#xff08;GDL&#xff09; 3、使用LLM进行图理解流程3.1、手动提示3.2、自提示 4、图理解基准4.1、结构理解任务4.1、语义理解任务 5、数据搜集5.1、结构理解任务5.2、语义理解任务 6、实验6.1、实验设…

VB6.0报错:操作符AddressOf使用无效

VB调试&#xff0c;尝试调用DLL中的方法并带有回调函数&#xff0c;报错提示&#xff1a; 操作符AddressOf使用无效 代码&#xff1a; Private Sub btnScan_Click()... WCHBLEStartScanBLEDevices AddressOf callBackEnd Sub This function is called from the dll Public Fu…

蓝桥杯-最少刷题数

&#x1f4d1;前言 本文主要是【算法】——最少刷题数的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304;每日一句&#x…

IaC基础设施即代码:Terraform 创建 docker 网络与容器资源

目录 一、实验 1.环境 2.Terraform查看版本 3.Linux主机安装Docker 4.Terraform使用本地编译&#xff08;In-house&#xff09;的Providers 5.Docker-CE 开启远程API 6. Linux主机拉取镜像 7.Terraform 创建docker 网络资源 8.Terraform 创建docker 容器资源 一、实验 …

Tensorflow2.0笔记 - 不使用layer方式,简单的MNIST训练

本笔记不使用layer相关API&#xff0c;搭建一个三层的神经网络来训练MNIST数据集。 前向传播和梯度更新都使用最基础的tensorflow API来做。 import tensorflow as tf from tensorflow import keras from tensorflow.keras import datasets import numpy as npdef load_mnist(…

Modern C++ 条件变量

今天无意中看到一篇帖子&#xff0c;关于条件变量的&#xff0c;不过仔细看看发现它并达不到原本的目的。 程序如下&#xff0c;读者可以先想想他的本意&#xff0c;以及有没有问题&#xff1a; #include <iostream> #include <thread> #include <condition_v…

无刷电机学习-原理篇

一、无刷电机的优点 使用一项东西首先就要明白为什么要使用它&#xff0c;使用它有什么优点。与有刷电机相比无刷电机除了控制繁琐几乎全是优点。 1、应用范围广&#xff1a;家用电器&#xff08;冰箱空调压缩机、洗衣机、水泵等&#xff09;、汽车、航空航天、消费品工业自动…

STM32之002--软件安装 Keil

文章目录&#xff1a; 一、安装 Keil 二、注册 三、安装芯片支持包 一、安装 Keil 重点 1&#xff1a; 安装时&#xff0c;不能使用中文路径&#xff0c;否则无法正常使用!! 重点 2&#xff1a; 不要安装 V5.36 及以上的版本&#xff0c;其默认AC6编译器&#xff0c…

(二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真

一、创建工作空间 mkdir catkin_ws cd catkin_ws mkdir src cd src 二、下载wpr_simulation源码 git clone https://github.com/6-robot/wpr_simulation.git 三、编译 ~/catkin_make 目录下catkin_makesource devel/setup.bash 四、运行 roslaunch wpr_simulation wpb_s…

priority_queue的使用与模拟实现(容器适配器+stack与queue的模拟实现源码)

priority_queue的使用与模拟实现 引言&#xff08;容器适配器&#xff09;priority_queue的介绍与使用priority_queue介绍接口使用默认成员函数 size与emptytoppush与pop priority_queue的模拟实现构造函数size与emptytoppush与pop向上调整建堆与向下调整建堆向上调整建堆向下调…