png图片压缩

做这没对项目对个人对公司都没任何实际意义的研究感觉就是在浪费生命,不过上头要做,没办法硬头皮去看吧。研究了几天也没得到任何结果。写下自己的一些想法,记得毕业设计的时候做的是矩阵的填充,当时把它应用到了图形还原上效果还不错。

为什么说做这个没任何意义呢。对小公司来说开发人员写出的代码要从公司的产品出发,有实际应用需求的。产品才是这个社会生存的根本,没被牛b产品实验过的技术很难说服别人的。好的产品自然会产生技术需求,它才是推动技术发展的原动力。对工作的抱怨就说到这吧,下面说下这两天的研究结果。

png有四个关键数据块,这四个数据块是png图片必须包含的。

1.文件头数据块IHDR(header chunk)

2.调色板数据块PLTE(palette chunk)

3.图像数据块IDAT(image data chunk)

4.图像结束数据IEND(image trailer chunk),固定的96个字节:0x00000000 0x49454e44 0xae426082

除了这四个数据块外还有一个固定的文件标志,为固定的64个字节:0x89504e47 0x0d0a1a0a。其余数据块为辅助数据块,是非必须的。

1.删去除了关键数据块和文件标志外的数据块。这样会丢失一些数据,虽然这些数据对显示不会很重要。但是这些数据相对图片大小而言不是很重要,只是很小的一部分。即使删除大小也没怎么压缩。

2.主要的数据集中于图像数据块IDAT对数据的压缩有两个切入点:数据和数据存储

1.数据:可以通过矩阵论方面的知识,减少冗余数据

2.数据存储:通过不同编码,减少空间大小

png格式采用的是DEFLATE压缩算法,主要涉及到LZ77编码和Haffman编码

1.LZ77:对重复的串进行压缩编码

2.Haffman:是一种变长编码,对出现概率大的用更短的编码,小的用长的编码

一、把png图片当成一个数据流直接用一些编码做处理

两种尝试:

1.对png图像用差分处理,再用Haffman编码;

2.对png图像数据做异或处理,再用Haffman编码;

这两个方式都没什么效果,基本没怎么压缩。也想过把Haffman编码换成哥伦布编码,哥伦布编码是对数的大小做变长编码,这个编码感觉上不适合这次的处理。因为它本身不会压缩数据,只有当数据中存在大量较小的数时才有压缩效果。

二、对png原数据做处理

这个还没试,没找到比Haffman编码有明显优势的编码。


### PNG 图片压缩方法与工具 PNG 是一种广泛使用的图像格式,其默认采用无损压缩技术来保存数据。然而,在某些场景下,为了进一步减小文件体积,可以选择有损压缩的方式。以下是针对 PNG 文件的无损和有损压缩的具体做法以及推荐的相关工具。 #### 一、无损压缩 PNG 的方法 无损压缩是指在不丢失任何原始像素信息的前提下缩小文件大小的技术。以下是一些常见的实现方式: - **使用专用工具** 推荐几款流行的无损压缩工具,它们能够显著降低 PNG 文件的体积而不影响画质[^2]。例如: - `OptiPNG`:一款开源命令行工具,专注于优化 PNG 文件。 ```bash optipng input.png -o7 -out output.png ``` - `Zopfli`:由 Google 开发的一种算法,适用于多种文件类型的无损压缩。 ```bash zopflipng input.png output.png ``` - **基于编程语言的库** 如果希望集成到自动化流程中,可选用如下库: - Python 中的 `Pillow` 库可以通过调整参数完成无损压缩操作。 ```python from PIL import Image image = Image.open('input.png') image.save('output.png', optimize=True, compress_level=9) ``` #### 二、有损压缩 PNG 的方法 对于允许一定程度失真的场合,可以尝试有损压缩手段以换取更小的文件尺寸。具体实践包括但不限于以下几个方面: - **利用专门软件进行处理** 安装并配置好相关程序后即可执行相应指令[^3]。比如通过 Rust 编写的两款实用工具——`pngquant`(负责有损压缩) 和 `oxipng`(用于无损压缩)[^3]: - 使用 `pngquant` 实现颜色量化从而达到缩减目的: ```bash pngquant --quality=65-80 --speed 1 input.png -o output.png ``` - **在线服务选项** 对于不想本地部署环境的情况,则可以直接上传至第三方网站让其自动帮我们转换成所需版本;不过需要注意隐私保护问题以免敏感资料外泄。 综上所述,无论是追求极致清晰度还是注重存储空间节省效果都可以找到合适的解决方案满足需求。 ```python from PIL import Image image = Image.open('example_input.png') # 打开一张示例图片 image.save('optimized_output.png', format='PNG', optimize=True, bits=8, quality=95) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值