9. 如何实现动画?
WBMP图像不同于在HTML中广泛使用的GIF格式。它不支持动画。但是还是可以使用WML的 <ontimer> 标签来创建一个。请注意这种方式不是能达到想象中效果的。
通过研究Animated Images Demo可以有这方面的一点概念。其网址为:
http://wap.colorline.no/demos.html
或者到:
http://wap.colorline.no/wap-faq/apps/anim.html
当在执行这样的动画方式的时候,要记住微型浏览器的内存是有限制的。不可能将所有的图片都装入到内存中。浏览器也不会装入那些过大的图片,因此某些动画可能在装入的时候就中断了。
演示程序:
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml">
<!-- Code written in Microsoft NOTEPAD.EXE. (c) Espen Lyngaas 2000 Color Line ASA -->
<wml>
<card id="image1" ontimer="#image2">
<timer value="10"/>
<p>
<img src="anim1.wbmp" alt="Anim1"/>
</p>
</card>
<card id="image2" ontimer="#image3">
<timer value="10"/>
<p>
<img src="anim2.wbmp" alt="Anim2"/>
</p>
</card>
<card id="image3" ontimer="#image4">
<timer value="10"/>
<p>
<img src="anim3.wbmp" alt="Anim3"/>
</p>
</card>
<card id="image4" ontimer="#end">
<timer value="10"/>
<p>
<img src="anim4.wbmp" alt="Anim4"/>
</p>
</card>
<card id="end" title="The End">
<p>
This is the end of the animation,but you can
<anchor>run it again.
<go href="#image1">
</go>
</anchor>
</p>
</card>
</wml>
如果使用PHP,可以看看更简单的程序:
<?
header("Content-type: text/vnd.wap.wml");
echo("<?xml version="1.0"?>n");
echo("<!DOCTYPE wml PUBLIC "//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml">nn");
echo("<!-- Code written in Microsoft NOTEPAD.EXE. (c) Espen Lyngaas 1999 Color Line ASA -->n");
?>
<wml>
<?
for($card=1;$card<5;$card++) {
echo("<card id="image".$card."" ontimer="#image".$card+1.">"n");
echo("<timer value="10"/>n");
echo("<p>n");
echo("<img src="anim".$card.".wbmp" alt="Anim".$card.""/>n");
echo("</p>n");
echo("</card>n");
}
?>
<card id="image5" title="The End">
<p>
This is the end of the animation, but you can
<anchor>run it again.
<go href="#image1">
</go>
</anchor>
</p>
</card>
</wml>
10. 如果WBMP图片看起来糟糕极了,该怎么办?
WBMP只有两种颜色,要是图片漂亮需要一定的技巧。但是可以减少图片的颜色。这里有一个叫做Floyd-Steinberg的方法可以做到。这样的一个程序是Jasc Paint Shop Pro。Paint Shop Pro的价格不是很贵,而且有直接保存为WBMP的插件。还可以使用30天免费版本。
11. 能够生成动态的WBMP图像吗?
当然。可以使用PHP、ASP 或者 Perl 来完成。这可能需要一种图像转换工具,因为服务端的脚本语言不支持WBMP的转换。
下面有一个PHP 的例子来说明使用脚本语言来完成的过程。
因为当前版本的GD不再创建GIF图像,而是称作PNG (Portable Network Graphics)图像。所以使用当前版本的PHP,只需要修改少量的代码就可以将GIF 转换到 PNG。另外,可以用“DuPont’s Image Magick ”将PNG 或者转换成 WBMP,它能在两者之间相互转换,并适合于多种平台。
在代码里,笔者用到了PHP功能 ImageCreateFromGif(),要输一些文本到GIF图像上,可以使用PHP的 ImageGreate()创建一个空白的 GIF/PNG 图像。
以下是代码:
<?
// hardcoded "variables" are safer!
// path to blank GIF file – not really needed (see above)
$blank = "./wapclock_blank.gif";
// You can look at it here
// path to input file generated by PHP
$input = "/tmp/wapclock.gif";
// path to temporary output file. Extension is irrelevant
$output = "/tmp/wapclock.out";
// path to ImageMagick convert
$convert = "/usr/local/bin/convert";
if($format == "gif") {
// if it’s GIF, send that Content-type
header("Content-type: image/gif");
$type = "GIF";
}
else {
if($format == "wbmp") {
// if it’s WBMP, send that Content-type
header("Content-type: image/vnd.wap.wbmp");
$type = "WBMP";
}
else {
// hope that the browser can read this
header("Content-type: text/plain");
//;or;someone forgot to set the format variable
$type = "";
}
}
// turn off caching
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
// create a GIF file from an empty GIF file (see faq)
$im = imagecreatefromgif($blank);
// put the current time into the time variable
$time = date("H:m:s");
// Place time variable sort of in the middle, with font size 4
imagestring($im,4,6,15,$time,0);
// generate a GIF file with PHP (see faq)
ImageGif($im,$input);
// empty the GD temporary buffer
ImageDestroy($im);
if(strlen($type) > 0) {
// if the type is known
// do the conversion
exec($convert. " ".$input. " ".$type. ":".$output);
}
else {
//;or;do nothing
echo("Unknown format!n");
// and stop
exit;
}
// open the converted file
$fd = fopen($output, "r");
// read verything into a variable
$contents = fread($fd,filesize($output));
// close the file
fclose($fd);
// pour out the contents
echo($contents);
?>