`
鸟哥哥
  • 浏览: 95985 次
  • 性别: Icon_minigender_1
  • 来自: 梅州兴宁
社区版块
存档分类
最新评论

鸟哥,再论PNG

阅读更多

  png图片格式定义是20世纪90年代中期的事了。它的IDAT块使用的LZ77算法(java自带的java.util.zip.DeflaterIn(Out)putStream有实现之)也派生出很多算法,很多压缩率都更高,如7z用的LZMA算法,号称最大压缩率算法。在手机资源如此稀缺的情况下,是可以考虑做一些改变。
  png格式,手机游戏,一般png8就足够了,8为2的8次方256,实际上已经浪费了一半,因为它实际只容纳128个颜色,一个byte嘛,128就成-128了。把IHDR里的长度宽度,色深等几个提取出来,把色盘(记为a)提取出来;利用他们用L7zz算法解压出IDAT块(注意可能有几块哦),再还原出原来数据;这些数据是什么?这些数据是一维byte数组(针对png8哈),长度为总像素数(即是图宽乘长)(记之为b),下标index,index % width,index/width就是图中的(x,y),那么a[b[index]*3]就是(x,y)的RGB中的R值,a[b[index]*3+1],a[b[index]*3+2]为G,B值。再根据tRNS确定哪个色是透明的,一般是最后一个色值。
a这块数据,可以把透明的标记成-1或者其他非索引b的就可以了,发现是-1值,就是透明的。把长宽色盘a和b一起用LZMA压缩,省多少空间,很可观吧?
  7z官网上有LZMA压缩和解压缩算法,解压缩算法5个类(当然内部类也有几个,鸟哥观察,人家肯定不是java人员写的)左右,完全可以移植到j2me上。
  这样图片,完全脱离了png格式,可以保护图片,可以省去png标记块名等一些格式上的字节。
  最后使用这些数据时,用Image.createARGB搞定。

分享到:
评论
1 楼 鸟哥哥 2010-12-20  
7z压缩算法要求的内存还是很大的,一般手机没那么大。

相关推荐

    png 库应用png 库 png库 png库 png库 png 库png库 png 库png 库

    png 库应用png 库 png库 png库 png库 png 库png库 png 库png 库png 库应用png 库 png库 png库 png库 png 库png库 png 库png 库png 库应用png 库 png库 png库 png库 png 库png库 png 库png 库png 库应用png 库 png库 ...

    Delphi7可用的PngImage控件 PNG Delphi v.1.564

    Delphi7可用的PngImage控件 PNG Delphi v.1.564,可用于D7显示Png图片。 使用方法:(Delphi 7 使用成功案例) 1、将本包中所有文件复制到开发文件保存的目录中 2、在USES单元中加入pngimage 3、窗体中插入image1...

    Delphi7 PngImage控件 PNGimage for Delph7

    2、在USES单元中加入pngimage 3、窗体中插入image1控件 4、在调用位置,加入如下代码就OK啦! var png: tpngimage; begin png := tpngimage.Create; png.LoadFromFile(getcurrentdir() + '\pic.png'); ...

    PNG图标PNG图标PNG图标

    PNG图标PNG图标PNG图标PNG图标PNG图标PNG图标PNG图标PNG图标PNG图标

    apng序列帧png制作工具 APNG apngasm_gui

    apng序列帧png制作工具 APNG apngasm_gui.exe 直接把多个png序列拖到面板中,自动生成APNG动态图片。

    D7 加载png图片,代码简单,合适新手png.rar

    Delphi7 加载png图片,代码简单,合适新手 procedure TForm1.FormCreate(Sender: TObject); var png: TPNGObject; begin png := TPNGObject.Create; //初始化 png.LoadFromFile('png\0.png'); S0.Glyph....

    PNG加密解密工具是什么?加密代码演示.docx

    # PNG加密解密工具 此工具可以加密和解密PNG图片,保护您的隐私。 ## 加密 1. 选择要加密的PNG图片。 2. 输入密码并确认。 3. 点击“加密”按钮。 4. 保存加密后的PNG图片。 ## 解密 1. 选择要解密的PNG图片。 ...

    TinyPNG(PNG图片压缩工具)PS插件.rar

    TinyPNG是一款用于Photoshop CS5/CS6/CC的插件程序,它的功能是对PNG图片进行高质量的压缩,压缩后体积会变小但不会过多影响图片的质量,使用比较简单,使用PS打开图片后,再从菜单中调出TinyPNG进行压缩,是网页...

    ps插件 TinyPNG

    PS插件版Tinypng优化、无损压缩PNG,支持批量处理,据说只支持PhotoshopCC及以上的版本。 Tinypng是一款来自国外的在线图片压缩云应用,完全免费无需注册。Tinypng采用的压缩图片方式是有损压缩,也就是说你上传的...

    png 图标png 图标

    png 图标 png 图标png 图标png 图标png 图标 本人上传所有程序都是源码

    PNG转ICON或ICON转PNG工具

    无意中在网上看到的,非常好用的PNG转ICON和ICON转PNG小工具,

    易语言PNG窗口外形模块(支持PNG透明)

    易语言PNG窗口外形模块(支持PNG透明) 该模块教程可在网上搜索,易语言中也有说明!

    PNG2JPG(png批量转jpg软件)V1.0.1绿色免费版

    PNG2JPG是一款绿色小巧的png在线转jpg工具,界面以DOS命令界面为主,将PNG直接拖入就可以轻松转换成jpg格式,支持批量转换,并且,在不影响图片透明度的情况下,还将图片压缩至最小,方便了存储,是一款非常实用的...

    TinyPNG PNG图片压缩利器

    PNG 是一种无损格式,JPG是有损格式。JPG在处理颜色很多的图片时,根据压缩率的不同,有时会去掉一些肉眼识别差距较小的中间颜色。但是PNG对于无损这个基本要求,会严格保留所有的色彩数。 所以。图片尺寸大,或者...

    使用 TinyPNG API 缩小 PNG图像的 便捷命令行工具_JavaScript_代码_下载

    使用 TinyPNG API 缩小 PNG 图像的便捷命令行工具 法 TinyPNG CLI 允许您以两种不同的方式提供您的 API 密钥。更方便的方法是将 API 密钥保存到.tinypng您的主目录中调用的文件中。另一种方法是在运行 CLI 时将其...

    PNG2JPG(png批量转jpg软件) v2.0.0

    PNG2JPG(png批量转jpg软件)是一款绿色小巧的png转jpg工具,将PNG直接拖入就可以轻松转换成jpg格式,支持批量转换,并且,在不影响图片透明度的情况下,还将图片压缩至最小,方便了存储,是一款非常实用的工具。...

    pkm convert to png, pkm格式图片转为png图片

    将pkm格式图片转为png图片。 解压目录后,放在pkm图片同目录下即可,双击执行 pkm convert to png.bat 文件。 作者: https://github.com/zhukunqian

    PNG图片宽高一把梭,爆破PNG图片宽高

    PNG图片宽高一把梭,爆破PNG图片宽高,直接拖拽,一键爆破

    PNG加密解密工具

    一款简单不错的png加密解密工具,手机游戏有的PNG图被加密,可用这工具解密

    png 透明png 透明vc++

    png 透明png 透明vc++

Global site tag (gtag.js) - Google Analytics