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编码有明显优势的编码。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值