PngMate使用教程2(转)

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

pngmate ken.gif ken.png -align 6

ken.gif

ken.png



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

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

ken1.png


JAVA手机网[www.cnjm.net]

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

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

ken2.png



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

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

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



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

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

pngmate ken3.png ken1.gif -split 6x1

ken1.gif



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

pngmate ken3.png ken2.gif -split 6x1 -delay 150

ken2.gif



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

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

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

JAVA手机网[www.cnjm.net]
boy1.gif
JAVA手机网[www.cnjm.net]



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

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

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

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

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
JAVA手机网[www.cnjm.net]


假设我有个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版本绘制相应大小的像素图,千万不要跟笔者一样偷懒哦!

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值