电脑技术学习

WAP常见问题问答大全

dn001

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);
  ?>