`

PngMate使用教程1(转)

阅读更多

PngMate使用教程

JAVA手机网[www.cnjm.net]

PngMate是一个非常实用的命令行图像转换工具,它提供的大部分功能几乎就是为了开发手机游戏而量身定制的。

JAVA手机网[www.cnjm.net]

下载PngMate

PngMate有以下一些功能特点:

JAVA手机网[www.cnjm.net]

1 去掉PNG中的一切冗余数据,在不影响图像质量的前提下极限压缩PNG图片,经验证生成的PNG比使用ImageOptimizer等优化工具优化过的PNG图片还要小
2 可以任意指定输出PNG图片的颜色数,以牺牲图像质量为代价进一步缩小PNG图片
3 可把动画GIF的多帧自动提取出来生成平铺的单张PNG
4 也可以切分输入的单帧图片成为多帧
5 可以对帧序列进行复杂的操作
6 可以把切分图片后的生成的帧序列重新生成动画GIF

JAVA手机网[www.cnjm.net]

7 可以针对每帧进行放缩、切割等操作,且可以自动运算以进行最大限度的切割
8 PngMate是命令行工具,可以轻易实现批处理或整合到工程创建脚本中
9 其它小的特色,如改变透明背景色,在帧上加注编号等

PngMate是命令行工具,和大部分人习惯使用的有界面的的软件有所不同,下面向大家介绍一下PngMate的典型使用方法。

JAVA手机网[www.cnjm.net]

为了在任何一个目录下面都能执行PngMate,我建议大家把PngMate.exe放在C:\Windows(如果是Win2K则是C:\WinNT)这个目录下面,这样最简单,什么也不用设置。当然也可以在"控制面板->系统->高级"里面把PngMate.exe所在的目录加入到环境变量PATH里面去,这样效果是一样的。

弄好以后,就可以使用"开始->程序->附件->命令提示符"或者"开始->运行->输入cmd"打开一个命令行窗口来使用PngMate了,在命令行窗口的命令提示符后输入pngmate,然后回车,看看是不是有中文帮助出来,如果没有,可能是你的机器没有安装JRE(Java运行环境),因为PngMate是用Java开发的。那么去下载一个JRE(要1.4或更高版本才行)安装上就应该可以了。JRE可以在这里下载。


通常我们制作手机游戏中的动画时,都是用ImageReady等工具先做成动画gif,因为这样可以看到动起来的效果。可是J2ME并不支持动画gif,所以只好在做完以后把gif的每一帧排列到一张大的png图片上,然后在程序里面再切割png来显示成一帧一帧的效果。这个把gif转成png的过程虽然没啥难度,不过每次每次的重复弄,还是挺麻烦的。用PngMate就简单了,比如下面的例子:

JAVA手机网[www.cnjm.net]


pngmate boy.gif boy.png

boy.gif

boy.png

ACDSee中看到的boy.png

JAVA手机网[www.cnjm.net]




生成的图片默认都是有透明色的,如果你用ACDSee等软件打开PngMate生成的图片,会发现透明的部分显示的是绿色,不要担心,实际在J2ME里绘制图片的时候,绿色的背景是不会出现的。在大多数情况下,绿色背景能很好的和画面中的有效部分区分开,哪里透明哪里不透明让你一目了然,不过有些图片—比如树木—里面本身有不少绿色的部分,这个时候用ACDSee看上去可能就和绿色的背景融为一体了,那么我们可以用-trans <RRGGBB>来改变透明色的背景,比如使用洋红色FF00FF:

pngmate boy.gif boy1.png -trans FF00FF

JAVA手机网[www.cnjm.net]

boy1.png

ACDSee中看到的boy1.png



boy.gif里面第三帧实际上和第一帧是一样的,在内存寸土寸金的J2ME程序中,我们怎么能容忍这样的浪费?好,我们用帧序列处理命令delete命令来把多余的帧删掉,不过要记住在PngMate中,帧是从0开始编号的,也就是说第三帧的编号是2,因此:

pngmate boy.gif boy2.png -delete 2

JAVA手机网[www.cnjm.net]


boy2.png



boy.gif是64x64的图片,可是里面的小男孩实际上的大小却没有那么大,png文件是压缩过的,所以透明的空白部分在png文件中增加不了几个字节,但是可以想见,在游戏的运行时刻,内存中保存的肯定是未压缩的像素数组,那么这些空白部分就要消耗实实在在的内存!因此把这些空白边界切掉绝对是有实际意义的,那么我们就用PngMate的crop功能来把输入图片的有效部分切出来:

pngmate boy.gif boy3.png -delete 2 -crop 48x52+8+10

boy3.png



不过这样好像还是有一些空白可以切掉,但是用目测的方式一个像素一个像素的调整确实太费劲了,如果能自动运算找出包含所有有效像素的最小矩形那是最好不过的,pngmate非常体贴的也帮你想到了这点哦!只要采用贪婪切割策略就可以了:

pngmate boy.gif boy4.png -delete 2 -crop greedy

JAVA手机网[www.cnjm.net]


boy4.png

JAVA手机网[www.cnjm.net]


分享到:
评论
Global site tag (gtag.js) - Google Analytics