WebP图像格式的原理 与图像压缩的关系

news/2024/9/20 15:35:50/文章来源:https://www.cnblogs.com/CLGYPYJ/p/18198750

目录
  • WebP简介
  • 原理
    • 为什么对预测数据做残差就可以提高压缩率呢?
    • 为什么使用算术编码压缩率高于哈夫曼编码?

WebP简介

\(\quad\)目前在互联网上,图片流量仍占据较大的一部分。因此,在保证图片质量不变的情况下,节省流量带宽是大家一直需要去解决的问题。传统的图片格式,如 JPEG,PNG,GIF 等格式图片已经没有太多的优化空间(某些研究在搞二次压缩)。因此 Google 于 2010 年提出了一种新的图片压缩格式 — WebP,给图片的优化提供了新的可能。
\(\quad\)WebP 图片格式来源于 VP8 视频编解码器,VP8 编解码器的一个强大功能就是能够进行帧内压缩,或者更确切地说,能将视频的每个帧都被压缩,再压缩帧与帧之间的差异。
更具体的描述可以关注官方文档https://developers.google.com/speed/webp/docs/webp_study
WebP格式在相同图像质量条件下压缩率高于JPEG。
image

原理

与JPEG算法相比WebP多了黄色部分的操作,即:

  • 对图像数据生成预测块,并与原始数据做差,残差数据进行DCT变换
  • WebP使用的统计压缩器是算术压缩器,替换 JPEG使用的霍夫曼编码器。
    image
    进一步解释以上两条原因:
为什么对预测数据做残差就可以提高压缩率呢?

残差块通常包含了较小的数值范围,同时数据分布更加集中(如下图所示),熵值更低。
通过结合预测和做残差,残差通常包含许多零值,可以更有效地压缩。
image

为什么使用算术编码压缩率高于哈夫曼编码?

算术编码:算术编码通常比哈夫曼编码更加高效。算术编码将整个数据流映射到一个单一的数值范围内,而哈夫曼编码则是将数据映射到变长的编码字串。由于算术编码对整个数据流进行编码,因此它可以更好地利用数据中的统计特性,达到更高的压缩率。
哈夫曼编码:哈夫曼编码通过根据字符出现频率来分配变长的编码字串,出现频率高的字符使用较短的编码,出现频率低的字符使用较长的编码。虽然哈夫曼编码在理论上可以达到信息论的熵下限,但它需要构建编码树,这可能会导致一些额外的编码开销。

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

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

相关文章

一次简单的QPS性能测试:无缓存|Redis缓存|直接内存

不同缓存策略下的性能指标:无缓存|Redis|直接内存 1.无缓存测试结果2.加入Redis缓存后性能翻倍6-73.直接用内存(错误写法)错误写法的性能指标正确写法(双检单例模式)正确写法后,性能

Echarts 图例后面增加内容 报错option is not defind

效果 需添加以下代码即可,与 series 平级formatter: function(name) {let data = option.series[0].data;let total = 0;let tarValue;for (let i = 0; i < data.length; i++) {total += data[i].value;if (data[i].name === name) {tarValue = data[i].value;}}// 数量let…

一次redis和内存的qps比较

不同缓存策略下的性能指标:无缓存|Redis|直接内存 1.无缓存测试结果2.加入Redis缓存后性能翻倍6-73.直接用内存(错误写法)错误写法的性能指标正确写法(双检单例模式)正确写法后,性能

完美的邮件大附件解决方案,需要具备哪些传输功能?

企业办公中,会经常使用到电子邮件,进行文件传输和发送。但大多数电子邮件服务都有附件大小的限制,超过这个限制的文件无法通过邮件直接发送,会需要寻找邮件大附件解决方案。通常会涉及到用邮件发送的情况,包括但不限于以下几种: 内部沟通:企业内部员工之间发送文件; 正…

突破边界:基于Windows 11的高效渗透测试系统构建

在这篇文章中,我将向大家推荐一款基于 Windows 11 的渗透测试系统,由一位行业内大佬封装而成。这个名为 Windows 11 Penetration Suite Toolkit 的项目旨在提供一个开箱即用的 Windows 渗透测试环境,方便安全专家和爱好者进行渗透测试工作。 项目地址 你可以在 GitHub 上找到…

进程线程、并行并发

什么是进程开发写的代码我们称为程序,那么将开发的代码运行起来。我们称为进程。通俗解释 当我们运行一个程序,那么我们将运行的程序叫进程。专业解释 进程是申请一块内存空间,将数据放到内存空间中去, 是申请数据的过程是最小的资源管理单元 进程是线程的容器程序与进程的区…

mysqldump备份表流程

以下流程整理引用文章:https://cloud.tencent.com/developer/article/1072482?from_column=20421&from=20421

如何选择一款安全高效的数据自动同步工具?

随着科技的不断发展,企业处理的数据量愈发庞大。数字化浪潮的涌现使得数据在业务活动和决策中的角色变得日益重要,然而这些数据往往分布在不同的位置,需要进行同步和分类,以便更有效地利用。以下是一些常见的数据自动同步场景: 企业数据同步:企业可能会使用数据同步来确保…

美团一面:项目中有 10000 个 if else 如何优化?想了半天,被问懵了!

大家好,我是R哥。 最近做 Java 面试辅导,有个兄弟面试美团,遇到一个特别有意思的问题:一万个 if else 如何优化,有好的解决方案吗?我看到这问题都有点懵逼,现实项目中怎么可能会有 10000 个 if else 的代码,至少我工作 10 余年没见过样的代码。 关键要写完这 10000 行的…

如何通过数据下发平台,实现总分支机构间数据安全流转?

随着企业业务的快速发展,不少大型企业会在全国乃至全球,设立总部-分部-办事处/网点等多层级的结构。在日常经营中,总部与分支之间存在着较为频繁的数据互动关系,经常会存在文件数据下发的场景。数据下发平台是专门设计管理和下发大量文件的系统,它能够将文件从中心服务器传…

radioGroup.check()有两次事件

解决方法 :使用radioBotton.setChecked()方法来解决 参考:https://www.jianshu.com/p/f69cd82cd85a

聊聊如何利用spring实现服务隔离

前言 假设我们有个场景,我们需要实现服务之间的数据隔离、配置隔离、依赖的spring bean之间隔离。大家会有什么实现思路?今天给大家介绍spring-cloud-context里面有个NamedContextFactory可以达到上面的效果 NamedContextFactory简介 NamedContextFactory可以实现子容器,通过…