植物百科网
当前位置: 首页 农业百科

图像的编码解码(最快的PNG图像解码器)

时间:2023-06-27 作者: 小编 阅读量: 1 栏目名: 农业百科

它是用来编写库的,完整的程序需要将Wuffs与另一种编程语言结合使用。对于Wuffs,8字节区块输入设计的每个内部循环一次读取64位可使DEFLATE微基准加速多达1.3倍。此外,DEFLATE涉及写入目标缓冲区和写入缓冲区边界的问题。与Go或Rust不同,Wuffs的内存安全是在编译时强制执行的,而不是通过插入运行时再检查。但开发者表示至少在安全性方面,WuffsNo.1没得说。

艳艳 发自 凹非寺量子位 报道 | 公众号 QbitAI

提到PNG,大多数人都不会感到陌生。

这种位图格式在图像领域使用频率仅次于JPEG。

然而在“解码PNG”这件事上,23年来主流的工具是一个叫做libpng的标准库。

但最近,一款号称“世界上最快的PNG图像解码器”诞生了,速度是“老大哥”的1.22-2.75倍!

除了速度方面的优势之外,更重要的一点,极其安全

最快的PNG图像解码器

与用C语言为底层的libpng不同,这款PNG图像解码器采用的是Wuffs

Wuffs是一种内存安全的编程语言(也是用这种语言编写的标准库),用于安全处理不受信任的文件格式

包括解析、解码和编码图像,音频,视频,字体等。

Wuffs不是一种通用编程语言。它是用来编写库的,完整的程序需要将Wuffs与另一种编程语言结合使用。

尤其是需要同时考虑性能和安全性的时候。

ps. 机智的你发现了吗,Wuffs其实就是Wrangling Untrusted File Formats Safely的缩写。

不过它以前叫Puffs,至于为什么将Puffs(parsing)改为Wuffs(wrangling),留给你们自己去想象~

那么,解码速度快至2.75倍,怎么做到的?

Wuffs通过SIMD加速方案,8字节宽的输入和复制,一次将整个图像进行位扭曲和zlib解压缩到一个大的中间缓冲区来实现高性能。此法替代了此前的一次一行(小块重复压缩)的方式。

这“一包带走”的操作需要更多的中间存储,但能解码的图像数量也更多了。

具体咋回事儿呢?

我们知道,PNG图像格式编/解码基于以下三方面:

  • CRC-32和Adler-32两种校验和算法
  • DEFLATE压缩
  • 二维过滤

Wuffs对这其中的每一步都进行了优化。

首先,对两种校验和算法施以SIMD加速技术。

SIMD是一种采用一个控制器来控制多个处理器,同时对一组数据中的每一个分别执行相同的操作从而实现空间上的并行性的技术。

其次,0.2版本Wuffs具有与zlib库一样的DEFLATE实现,而0.3版Wuffs为现代CPU(具有64位未对齐加载和存储)添加了两个重要的优化:8字节区块输入和8字节区块输出

DEFLATE是同时使用了LZ77算法与哈夫曼编码的一个无损数据压缩算法。

对于Wuffs,8字节区块输入设计的每个内部循环一次读取64位可使DEFLATE微基准加速多达1.3倍

而8字节区块输出设计将副本长度舍入为8的倍数可以使DEFLATE微基准提高多达1.48倍

此外,DEFLATE涉及写入目标缓冲区和写入缓冲区边界的问题。

(经典的“缓冲区溢出”安全漏洞,类似于从悬崖上奔跑,如何不落入鲨鱼口中)。

此方面,Wuffs使用和libpng相似的蓝/红双重实现技术

蓝/红双重实现技术:一种快速的“蓝色”解压缩(在距缓冲区末端至少258个字节或更多字节 时)以及一种缓慢的“红色”解压缩(反之)技术。

以前面的从悬崖上奔跑做比喻,就是在离崖边还远时尽可能得快跑,离崖边很近时减速刹车。

但同样的技术,为什么Wuffs更快?

因为它能一次将几乎所有内容(eg. 300×200 RGB图像的像素的99%以上)解压缩到一个大的中间缓冲区中,而不是一次只压缩一行到一个小的、可重复使用的中间缓冲区中。

如图所示,几乎所有内容现在都在“蓝色”区域中解码。

这本身就比“红色”区域快。

而且在蓝色代码和红色代码之间交替时,Wuffs也避免了任何指令高速缓存或分支预测变慢的情况。

最后,虽然Wuffs和libpng都具有PNG二维过滤的SIMD实现。

但是因为libpng将任何自分配的像素行缓冲区对齐到最适合SIMD的边界时,对齐这步操作会影响SIMD指令的选择和性能。

而Wuffs对缓冲区对齐的承诺较少,部分原因是Wuffs不具有分配内存的能力,但主要还是因为一次全部解压缩时,zlib压缩要求放弃例如每行开头4字节的对齐。

为什么说最安全?

与Go或Rust不同,Wuffs的内存安全是在编译时强制执行的,而不是通过插入运行时再检查。

( ps.运行时安全检查也可能会影响性能。)

此外,在处理不受信任的(第三方)PNG图像时,沙盒和多进程体系结构可以提供额外的深度防御。

在上一节描述的三步优化技术也可用来给现有的libpng、Go/Rust PNG库等打补丁。

然后就有网友说这样一来Wuffs还是不是最快的就难说了……但开发者表示至少在安全性方面,Wuffs No.1没得说。

最后,Wuffs版本0.3.0-beta.1刚刚发布,但从目前的功能来看,它还不支持颜色空间或伽马校正。

有兴趣的读者可访问参考链接[6]。

参考链接:

[1]https://nigeltao.github.io/blog/2021/fastest-safest-png-decoder.html[2]https://groups.google.com/g/wuffs/c/sAcU-Uvjns8[3]https://news.ycombinator.com/item?id=26714831[4]https://zhuanlan.zhihu.com/p/196797277[5]https://github.com/google/wuffs/blob/main/doc/note/memory-safety.md

[6]https://github.com/google/wuffs/tree/v0.3.0-beta.1/example

— 完 —

量子位 QbitAI · 头条号签约

关注我们,第一时间获知前沿科技动态

    推荐阅读
  • 空气含量中最多的气体(空气含量中最多的气体介绍)

    空气中含量最多的气体是氮气,氮气约占空气体积分数的百分比约为78%。通过实验测定,空气的成分按体积计算,氮气大约占78%、氧气占21%、稀有气体0.94%、二氧化碳0.03%、其他气体和杂质0.03%,也就是说空气中含量最多的物质是氮气。氮气化学性质很不活泼,在高温高压及催化剂条件下才能和氢气反应生成氨气;在放电的情况下才能和氧气化合生成一氧化氮;即使Ca、Mg、Sr和Ba等活泼金属也只有在加热的情形下才能与其反应。

  • 文思豆腐羹如何做好吃(文思豆腐羹用什么豆腐)

    文思豆腐是一道有名的淮扬菜,需要的就是精湛的刀工,这样做出的文思豆腐会有嫩滑的口感,打造入口即化的口感。文思豆腐羹如何做好吃文思豆腐羹材料和做法步骤一、文思豆腐羹材料准备好豆腐400克,鸡脯肉,火腿还有香菇,再有准备好生菜,冬笋,调料需要准备盐和味精。

  • 结构性存款可以买理财吗(结构性存款是存款吗)

    雪球产品就是今年年初监管向信托公司进行窗口指导,要求叫停的产品。简单的说,这是一种高风险的金融衍生品,它通过持有一定结构的金融衍生品,来实现在某一特定情况下获利。这样的投资结构就能保证我不论涨,还是跌,只要在一定幅度内都可以盈利。交易期权等金融衍生品,是非常高风险的投资。

  • 正言厉色意思(正言厉色的意思)

    下面内容希望能帮助到你,我们来一起看看吧!正言厉色意思正言厉色,汉语成语,拼音是zhènɡyánlìsè,意思是形容板着脸,神情非常严厉。出自《汉书·王莽传》。宝玉突然想出一个主意,一本正经地给她讲扬州黛山林子洞耗子精偷香芋的故事,黛玉见他正言厉色,以为真有其事,后来才发现原来是在取笑她。

  • 面谈调薪酬有什么技巧(跟老板谈调薪的技巧有哪些)

    如果你在老板心目中分量很大,一般老板都会给你加薪的。和老板谈加薪时目的一定要明确,让老板知道你只是为了加薪,而不是辞职走人。和老板谈加薪后,一定要给老板一个考虑的时间,不要咄咄逼人,逼着老板加薪。老板也要有足够的思考时间,来考虑你是否值得加薪,给你加薪后对公司有没有什么影响。不仅口头上要表示感谢,工作中要更加努力,让老板觉得给你加薪是值得的。

  • 杏花有没有香味(杏花闻起来会特别香吗)

    杏树是中国著名的观赏树木,可配植于庭前、墙隅、道路旁、水边,也可群植、片植于山坡、水畔,是春季主要的观赏树种。杏花直径2至3厘米,先于叶开放。花梗短,长1至3毫米,被短柔毛。花萼紫绿色,萼筒圆筒形,外面基部被短柔毛。萼片卵形至卵状长圆形,先端急尖或圆钝,花后反折。花瓣圆形至倒卵形,白色或带红色,具短爪。

  • 减肥减肚子的方法(怎么减肚子呢)

    减肥减肚子的方法食用健康食品:酸奶与发酵的牛奶能激活消化必须的物质,有助于改善肠道微生物系统,从而防止腹部隆起。走路、喝水、按摩:走路及喝水有利腹部扁平。

  • 新坑翡翠手镯多少钱(新坑翡翠手镯的价格)

    新坑翡翠手镯多少钱?新坑翡翠手镯多少钱翡翠手镯作为大件翡翠制品,用料特别多,只有大块、质量好的翡翠原石才能打造成手镯,因此翡翠手镯的价格都比较高,商家们拿到质量比较好的原石也尽可能打造成手镯。具体到新坑种翡翠,因为大多数新坑种翡翠透明度都不高,质地也不够细腻,因此种水一般都是以糯种或豆种为主,极少出现冰种或冰种以上的种水,这样的翡翠价格价格自然不会太高,一个品质比较好的糯种翡翠手镯大概在十万以内。

  • 宁波毛蚶做法水煮几分钟(毛蚶煮多长时间可以吃)

    宁波毛蚶做法水煮几分钟毛蚬是很多人喜欢吃的食物,不过建议大家在做之前都要先用开水煮以下。强精益气,提高精液质量,增强精子活力。适用于治疗肾阳虚所致的阳痿、腰痛、小便频数及补五脏之气不足。可治疗全身水肿,小便不利等。能软化和保护血管,有降低人体中血脂和胆固醇的作用。

  • 2022洛阳湿地公园最新名单 洛阳生态公园最新消息

    国家级湿地自然保护区河南黄河湿地国家级自然保护区,面积24000公顷。国家级湿地公园嵩县陆浑湖国家湿地公园,面积4222.39公顷伊川伊河国家湿地公园,面积1384.36公顷。