用户: 密码: 答案:   我要注册   忘记密码

加入收藏  设为首页

开发文档

CNJM首页

业界新闻

手机软件

终端应用

资源下载

EclipseME

CNJM论坛

                 

频道列表

J2ME开发 176篇
服务器端开发 33篇
JAVA语言 70篇
游戏与图形 101篇
WindowsMobile开发 6篇
Symbian开发 61篇
Brew开发 36篇
其它开发平台 6篇

热点文章

PngMate使用教程 53868次
使用JavaMagic进行... 29106次
手机游戏修改(2)工具 19305次
手机游戏修改之浅谈 12449次
手机游戏修改(8)... 12085次
J2ME游戏开发笔记...  11771次
开发手机游戏的一...  10780次
J2ME潜艇大战游戏...  10476次
Java手机游戏编程...  10286次
手机游戏知识扫盲 10272次
手机盗版软件现状分析 10168次
J2ME游戏中的图片处理 9838次

文章搜索

搜 索
按 照
频 道
  
PngMate使用教程
编辑:rocks    审核:rocks    文章来源:本站原创
关键词:png, 游戏制作, 图形    发表日期:2006-02-15 15:42:16    浏览次数:53868次
本文版权归原作者,中国JAVA手机网收录本文的目的是让更多人阅读到此文章。转载请注明出处为中国JAVA手机网<www.cnjm.net>

[本文章最后由 rocks 在2006-02-15 17:54:16编辑过]

来自:http://www.cnjm.net/tech/article849.html

PngMate使用教程

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

下载PngMate

PngMate有以下一些功能特点:
1 去掉PNG中的一切冗余数据,在不影响图像质量的前提下极限压缩PNG图片,经验证生成的PNG比使用ImageOptimizer等优化工具优化过的PNG图片还要小
JAVA手机网[www.cnjm.net]
2 可以任意指定输出PNG图片的颜色数,以牺牲图像质量为代价进一步缩小PNG图片
JAVA手机网[www.cnjm.net]
3 可把动画GIF的多帧自动提取出来生成平铺的单张PNG
4 也可以切分输入的单帧图片成为多帧
5 可以对帧序列进行复杂的操作
6 可以把切分图片后的生成的帧序列重新生成动画GIF
7 可以针对每帧进行放缩、切割等操作,且可以自动运算以进行最大限度的切割
8 PngMate是命令行工具,可以轻易实现批处理或整合到工程创建脚本中
9 其它小的特色,如改变透明背景色,在帧上加注编号等
JAVA手机网[www.cnjm.net]

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

为了在任何一个目录下面都能执行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就简单了,比如下面的例子:

pngmate boy.gif boy.png

boy.gif
   
boy.png
   
ACDSee中看到的boy.png
    540) this.width = 540'>

JAVA手机网[www.cnjm.net]


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

pngmate boy.gif boy1.png -trans FF00FF

boy1.png
   
JAVA手机网[www.cnjm.net]
ACDSee中看到的boy1.png
JAVA手机网[www.cnjm.net]
    540) this.width = 540'>


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

pngmate boy.gif boy2.png -delete 2

boy2.png
   


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

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

JAVA手机网[www.cnjm.net]
boy3.png
   

JAVA手机网[www.cnjm.net]

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

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

boy4.png
   


下面我们来换一张图片,街头霸王Ken,这张gif的帧数比较多,默认输出排成一行看着费劲,那么可以用align命令来指定一行的帧数,指示PngMate输出成多行:

pngmate ken.gif ken.png -align 6

JAVA手机网[www.cnjm.net]
ken.gif
   
ken.png
   


ken.gif直接转成的ken.png体积比较大,而且我们实际做游戏根本用不到这么大的角色,那么可以用resize来改变帧的大小,我们在下面的例子里高度指定为0,意思是根据给定的宽和原图的比例自动运算出新图片的高:

pngmate ken.gif ken1.png -resize 64x0 -align 6

ken1.png
   


可是这样生成的png还是有点大,我们可以用frameskip来跳过一部分帧,这样动作虽然不如原来流畅,但是图片体积也相应大大减小了:

pngmate ken.gif ken2.png -resize 64x0 -frameskip 1

JAVA手机网[www.cnjm.net]
ken2.png
   


好,小了将近一半了,再想缩小图片,可以采用减少图片使用的颜色数的办法,一般来说,使用的颜色越少,图片体积越小,当然相应的图像质量也会下降,不过我们完全可以多试几次,在图片体积和图像质量中达到一个最佳平衡点:

pngmate ken.gif ken3.png -resize 64x0 -frameskip 1 -colors 40

ken3.png
   


怎么样,虽说图像质量稍有下降,但看上去并没有比ken2.png差太多,不过体积可又减小了将近一半!

JAVA手机网[www.cnjm.net]
做完了这些工作,是不是很想看看现在的缩小版Ken动画的实际效果?再转回动画gif当然是最直接的办法,不用求助美工,pngmate一样帮你搞定!采用split命令可以把输入的图片切分成多帧,而我们的ken3.png只有一行,这一行上水平排列了6帧,所以应该切分成6列 x 1行,因此用下面的命令行:

pngmate ken3.png ken1.gif -split 6x1

ken1.gif
   


还不错吧?不过看上去比原来的动作慢了一点,这是因为没有指定gif的帧间延迟,所以PngMate采用了默认值200毫秒(每秒5帧),对我们的动画来说确实慢了一些,没关系,可以用delay命令来指定输出gif的帧间延迟:

pngmate ken3.png ken2.gif -split 6x1 -delay 150
JAVA手机网[www.cnjm.net]

ken2.gif
   


怎么样,是不是感觉好多了?

我们刚才处理的小男孩图片现在也来看看动态效果,但是想起来没有,我们刚才删除了其中一个重复帧,这样如果直接生成gif的话,动作就不连贯了,怎么办呢?别急,pngmate还提供了帧序列处理命令select,可以用它来选择部分帧,而且帧序号可以重复哟,所以只要用下面的命令就可以做到:

pngmate boy4.png -split 3x1 boy1.gif -delay 150 -select 0,1,0,2

boy1.gif
   


大家可以从上面的例子里看到,pngmate对参数的顺序要求是很宽松的,可以像前面的例子一样,把命令可以写在输入、输出文件的后面,也可以写在它们的前面甚至中间。但是crop和resize命令如果组合使用,那么处理的顺序就是命令行中它们出现的的先后顺序。同样,对于frameskip, select, delete这三个帧序列处理命令,它们如果同时出现,那么也是按照在命令行中出现的先后顺序来依次执行。好像有点复杂,不过话说回来,在绝大多数场合下,没有必要组合使用这些命令。

当我们要使用select命令或者delete命令来操作帧序列的时候,遇到帧比较多的情况,挨个数帧编号也是挺麻烦的一件事情,因此pngmate特别提供了在图片上加注数字编号的功能,你可以用这个功能生成一张参考图片来方便工作:

pngmate ken.gif ken4.png -numbered -align 6

JAVA手机网[www.cnjm.net]
ken4.png
   


PngMate的命令差不多都给大家介绍完了,下面我们来实战一个稍微复杂点的例子,从一张包含了所有帧的png图片生成小男孩向各个方向走的连续动画:

pngmate boyall.png -split 3x4 -select 0,1,0,2,0,1,0,2,6,7,6,8,6,7,6,8,3,4,3,5,3,4,3,5,9,10,9,11,9,10,9,11 boyall.gif -delay 150 -crop greedy
JAVA手机网[www.cnjm.net]

boyall.png
   
boyall.gif
   

JAVA手机网[www.cnjm.net]

这命令行看上去有些复杂,不过其实就是那个select命令稍微长了一点,它依次指定了所有动画帧,其它的命令都是老朋友了,只不过这次组合起来一起用而已。

如果我有大量的图像文件想使用PngMate批量处理怎么办呢?虽然PngMate本身不支持批量处理文件,但你可以使用批处理文件(.bat文件)或者dos命令"for"来轻松的实现批处理功能。对于很多简单的处理,for命令就能搞定。严格说来,这已经不是本教程讨论的范畴,不过大家可能对for命令不太熟悉,我可以抛砖引玉介绍一二。

for命令的基本格式是for %变量 in (范围) do ...
do后面可以使用任何命令行命令,且中间可以使用前面的变量,比如在下面的例子中,我们将为当前目录下每张jpg图片生成一张64x64,60色的png预览图,文件名为原来的文件名去掉.jpg扩展名后再加上.png扩展名,那么:

JAVA手机网[www.cnjm.net]
for %I in (*.jpg) do @pngmate %I %~nI.png -resize 64x64 -colors 60


假设我有个S60的游戏,想往S40平台移植,要把所有图片整体按比例缩小到原来的72.7%(128/176),那么用for命令可以这么做:

md s40
for %I in (*.png) do @pngmate %I s40\%I -resize 72.7% -colors 16


当然这只是举个例子,如果你也这么干的话,你的游戏的S40版本估计十有八九是个垃圾了,因为pngmate缩小后的图片比起专门绘制的像素图,那质量当然是差远了。真正负责任的开发者还是应该专门为40版本绘制相应大小的像素图,千万不要跟笔者一样偷懒哦!

下载PngMate


==
来自:http://www.cnjm.net/tech/article849.html

相关文章
    极限压缩JAR包中的图片  [2006-07-12]
    MIDP中尝试粒子系统  [2006-04-13]
    安全高效的使用PNG图  [2006-03-27]
    古代帝国中的图片资源节省算法  [2006-03-27]
    在MIDP2.0中操作图片像素  [2006-03-27]
    使用ImageMagick批量对图片进行处理  [2006-02-27]
    优化png图片的小工具  [2006-02-27]
    打造自由换色的png图片类  [2006-02-27]
最新评论   [查看全部评论(31条)]
rocks 在 2008-06-02 10:57:04 发表的评论:
谢谢大家的支持! 
996320 在 2007-11-12 17:27:42 发表的评论:
晕。教程也不完整。
图片放在
dos命令打开时
不是有文字吗?
这行。
C:\Documents and Settings\new (这里是输DOS命令的)

如果DOS界面是这样
那么图片就放在
C:\Documents and Settings\new 的目录下面
生成的图片也就在同一个目录
dos里显示如果是
C:\
则将图片放在C盘根目录
以此类推` 
ganxinyangjie 在 2007-04-17 21:52:27 发表的评论:
把图片路径加上即可 
ganxinyangjie 在 2007-04-17 21:15:26 发表的评论:
图片放在哪儿?》? 
copyninja 在 2007-03-22 10:44:14 发表的评论:
图片文件放在哪个文件夹下编辑啊 他总提示我文件不存在 
匿名 在 2006-12-09 13:26:04 发表的评论:
请问,图片放在那边才可以呢?好像不能随便放的吧?随便放的话总是提示说找不到图片文件。请指教阿。 
网站简介  |  关于版权  |  广告服务  |  网站地图  |  联系我们
Copyright © www.CNJM.net, All rights reserved
中国JAVA手机网 版权所有
ICP备案:京ICP备041452