【CSS Tricks】一种基于AV1视频格式的现代图像格式-AVIF

引言

AV1图像文件格式(英语:AV1 Image File Format,简称AVIF)是由开放媒体联盟(AOM)开发,采用AV1视讯编码技术压缩图像的一种图像文件格式,能用来储存一般的图像和动态图像。AVIF和苹果公司产品所用的HEIC(英语:High-Efficiency Image Container)图像格式都采用了基于国际标准化组织基本媒体文件格式的高效率图片格式(High Efficiency Image File Format,简称HEIF)容器,不过HEIC采用的压缩技术来自于HEVC/H.265。

在Netflix于2020年的数个测试中,AVIF展现了比JPEG更为优秀的压缩效率,也保存了更为丰富的细节,几乎没有方块效应,在轮廓分明、色彩鲜艳的天然图像和材质中有更少的色彩失真。

浏览器支持性

  • 参考维基百科提供的数据,截止2024年6月,全球93.44%的用户的浏览器能支持AVIF格式。
  • 在Can i use?网站上查询到的支持性结果为:
    在这里插入图片描述
  • 现阶段主流浏览器的最新版本几乎都支持了AVIF格式图片。

AVIF的优势有哪些?

  • 支持多种色彩空间,包括了:
    • 高动态范围影像(HDR):于ITU BT.2100中定义的,应用了感知量化或混合对数伽玛的影像传递函数技术,使用BT.2020原色的色彩空 间。
    • 标准动态范围影像(SDR):sRGB色彩空间、BT.709标准、BT.601标准,或宽色域。
    • 由符合ITU-T H.273 和 ISO/IEC 23091-2标准的独立编码码位(CICP)定义的色彩空间。
    • 由ICC色彩特性文件定义的色彩空间。
  • 支持无损资料压缩和有损资料压缩。
  • 支持8位元、10位元、12位元色彩深度。
  • 相较于webp、jpeg、png格式,具备更好的压缩效果,加载更加顺畅。

如何将已有图片转换为AVIF图片?

通过在线网站转换

  • Squoosh:这个网站测试了一下一般网络访问还是很流畅的,而且界面设计的比较好看,简单易操作,免费。
    squoosh

  • cloudinary:这个网站测试完可能得需要一点魔法才可以正常访问,但是功能比较全,不只是图片转换,还包含视频等其他格式。除了在线转换外,还提供云api接口,方便集成到项目中。按月清算免费额度。
    cloudinary

通过代码自行转换

  • 这里以nodejs为例。
  • nodejs版本为:v18.19.0
  • 新建文件夹后分别执行以下操作:
// 初始化项目
npm init -y
// 下载依赖
npm install sharp
  • 新建index.js文件进行编码:
const sharp = require("sharp");
const path = require("path");
// 设置输入文件地址及文件名
const inputFile = path.resolve(__dirname, "./avatar.jpg");
// 设置输出文件地址及文件名
const outputFile = path.resolve(__dirname, "./output/result.avif");
const convertToAVIF = () => {sharp(inputFile).toFormat("avif", { palette: true }).toFile(outputFile);
};
convertToAVIF();
  • 在文件夹下执行
node index.js
  • 即可在output文件夹内得到处理后的avif格式图片。
  • 经过计算,压缩后的图片大小仅为原图的33%,根据图像内容不同,压缩比例也会不同,我最高可以压缩84%的体积。
    原图
    avif

预览处理后的图片

  • 压缩后的图片可以直接丢到浏览器中预览,如果需要桌面端打开预览需要参考以下设备支持性:
    • Windows - 微软在2019年5月推出的Windows 10 19H1,对AVIF提供扩展名、小画家和许多API方面的支持(需要安装AV1视频扩展)。
    • Android - 2021年10月推出的Android 12增加对AVIF的支持,但不会是相机app的预设图片格式。
    • GNU/Linux - Linux发行版普遍支持AVIF。
    • 苹果平台 - iOS 16、iPadOS 16和macOS 13支持AVIF图片。

总结

  1. 作为一名前端开发工作者,我们应该适时的去拥抱新的技术成果,以图片为例,从一开始远古时代的雪碧图,到后来的webp格式图片,最后到今天的avif格式图片,都是为了在保证预览效果的前提下,尽量去压缩体积以提高加载效率。不过具体使用哪种方式,还是要依托于您项目中的实际需求以及项目运行环境共同决定。在这只是提供一点新的思路仅供参考。
  2. 另外在一个国外大佬Jake Archibald的博客下发现了一篇对比avif与其他各类图片格式压缩后效果的博文,感兴趣可以阅读了解下。
    • 文章地址:AVIF has landed

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

torch.embedding 报错 IndexError: index out of range in self

文章目录 1. 报错2. 原因3. 解决方法 1. 报错 torch.embedding 报错: IndexError: index out of range in self2. 原因 首先看下正常情况: import torch import torch.nn.functional as Finputs torch.tensor([[1, 2, 4, 5], [4, 3, 2, 9]]) embedd…

【Git原理与使用】版本管理与分支管理(1)

目录 一、基本操作 1、初识Git 2、Git安装[Linux-centos] 3、Git安装[ Linnx-ubuntu] 4、创建git本地仓库 5、配置Git 6、认识工作区、暂存区、版本库 7、添加文件 8、查看历史提交记录 9、查看.git文件目录结构 10、查看版本库对象的内容 11、小结(在本地的.git仓库…

JVM常用参数配置

JVM常用参数配置 简单的java命令后面跟上配置参数。 -XX,JVM启动参数的一种类型,属于高级。 ,开启的意思 :,设置具体参数 #jvm启动参数不换行 #设置堆内存 -Xmx4g -Xms4g #指定GC算法 -XX:UseG1GC -XX:MaxGCPauseM…

Qt_多元素控件

目录 1、认识多元素控件 2、QListWidget 2.1 使用QListWidget 3、QTableWidget 3.1 使用QListWidget 4、QTreeWidget 4.1 使用QTreeWidget 5、QGroupBox 5.1 使用QGroupBox 6、QTabWidget 6.1 使用QTabWidget 结语 前言: 在Qt中,控件之间…

《深度学习》—— 神经网络模型对手写数字的识别

神经网络模型对手写数字的识别 import torch from torch import nn # 导入神经网络模块 from torch.utils.data import DataLoader # 数据包管理工具,打包数据, from torchvision import datasets # 封装了很多与图像相关的模型,数据集 from torchvi…

分布式事务seata

文章目录 CAP理论BASE 理论seata解决分布式事务seata重要对象XA模式AT模式TCC模式saga模式 CAP理论 CAP理论指出在分布式系统中三个属性不可能同时满足。 Consistency 一致性:在分布式的多个节点(副本)的数据必须是一样的(强一致…

展锐平台的手机camera 系统开发过程

展锐公司有自己的isp 图像处理引擎,从2012 年底就开始在智能手机上部署应用。最初的时候就几个人做一款isp的从hal 到kernel 驱动的完整软件系统,分工不是很明确,基本是谁擅长哪些就搞哪些,除了架构和编码实现之外,另外…

软硬件项目运维方案(Doc原件完整版套用)

1 系统的服务内容 1.1 服务目标 1.2 信息资产统计服务 1.3 网络、安全系统运维服务 1.4 主机、存储系统运维服务 1.5 数据库系统运维服务 1.6 中间件运维服务 2 运维服务流程 3 服务管理制度规范 3.1 服务时间 3.2 行为规范 3.3 现场服务支持规范 3.4 问题记录规范…

【数据结构】排序算法---基数排序

文章目录 1. 定义2. 算法步骤2.1 MSD基数排序2.2 LSD基数排序 3. LSD 基数排序动图演示4. 性质5. 算法分析6. 代码实现C语言PythonJavaCGo 结语 ⚠本节要介绍的不是计数排序 1. 定义 基数排序(英语:Radix sort)是一种非比较型的排序算法&…

秋招常问的面试题:Cookie和Session的区别

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…

LeetCode[中等] 3. 无重复字符的最长子串

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 思路:滑动窗口,设置左右指针left与right,maxLength存储长度 利用HashSet性质,存储滑动窗口中的字符 如果没有重复的,那么right继续向…

LeetCode_sql_day28(1767.寻找没有被执行的任务对)

描述:1767.寻找没有被执行的任务对 表:Tasks ------------------------- | Column Name | Type | ------------------------- | task_id | int | | subtasks_count | int | ------------------------- task_id 具有唯一值的列。 ta…

无人机企业合法运营必备运营合格证详解

无人机企业运营合格证,是由国家相关航空管理部门(如中国民用航空局或其授权机构)颁发的,用于确认无人机企业具备合法、安全、高效运营无人机能力的资质证书。该证书是无人机企业开展商业运营活动的必要条件,标志着企业…

原生+jquery写自动消失的提示框

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>自动消失消息提示</title> <style>/…

信息安全数学基础(9)素数的算数基本定理

前言 在信息安全数学基础中&#xff0c;素数的算数基本定理&#xff08;也称为唯一分解定理或算术基本定理&#xff09;是一个极其重要的定理&#xff0c;它描述了正整数如何唯一地分解为素数的乘积。这个定理不仅是数论的基础&#xff0c;也是许多密码学算法&#xff08;如RSA…

同为TVT设备主动注册协议接入SVMSPro平台

同为设备主动注册协议接入SVMSPro平台 步骤一&#xff1a;进设备网页或者NVR配置界面&#xff0c;进功能面板&#xff0c;网络&#xff0c;平台接入 接入类型&#xff1a;平台软件&#xff0c;勾选启用主动上报 服务器地址&#xff1a;平台服务IP 端口&#xff1a;12009 ID&…

高级算法设计与分析 学习笔记6 B树

B树定义 一个块里面存了1000个数和1001个指针&#xff0c;指针指向的那个块里面的数据大小介于指针旁边的两个数之间 标准定义&#xff1a; B树上的操作 查找B树 创建B树 分割节点 都是选择正中间的那个&#xff0c;以免一直分裂。 插入数字 在插入的路上就会检查节点需不需要…

RabbitMQ 高级特性——持久化

文章目录 前言持久化交换机持久化队列持久化消息持久化 前言 前面我们学习了 RabbitMQ 的高级特性——消息确认&#xff0c;消息确认可以保证消息传输过程的稳定性&#xff0c;但是在保证了消息传输过程的稳定性之后&#xff0c;还存在着其他的问题&#xff0c;我们都知道消息…

Delphi5利用DLL实现窗体的重用

文章目录 效果图参考利用DLL实现窗体的重用步骤1 设计出理想窗体步骤2 编写一个用户输出的函数或过程&#xff0c;在其中对窗体进行创建使它实例化步骤3 对工程文件进行相应的修改以适应DLL格式的需要步骤4 编译工程文件生成DLL文件步骤5 在需要该窗体的其他应用程序中重用该窗…

不会JS逆向也能高效结合Scrapy与Selenium实现爬虫抓取

1. 创建基础的scrapy项目 1.1 基础项目 在pycharm中安装scrapy框架 pip install scrapy 创建项目 scrapy startproject 项目名称 我们现在可以看到整体文件的目录&#xff1a; firstBlood ├── firstBlood # 项目跟目录 │ ├── init.py │ ├── items.py # 封装数…