Chinaunix首页 | 论坛 | 博客
  • 博客访问: 126985
  • 博文数量: 100
  • 博客积分: 1850
  • 博客等级: 上尉
  • 技术积分: 650
  • 用 户 组: 普通用户
  • 注册时间: 2005-11-02 23:52
文章分类

全部博文(100)

文章存档

2016年(1)

2009年(1)

2008年(5)

2007年(11)

2006年(32)

2005年(50)

我的朋友

分类: 系统运维

2006-06-16 01:38:18

关于WBMP的若干问题
【摘自Devsky WAP论坛,特此鸣谢】

1. 如何创建WBMP?

  RCP分发系统有Adobe Photoshop 5.x 和 PaintShop Pro的插件支持WBMP格式。GINGCO和Teraflops提供转换的工具。

2. 哪种格式的图像可以放送到WAP终端?

  WAP标准规定的BMP格式WBMP。WBMP Type 0是一个简单的黑白,非压缩的BMP格式。细节可以参考:
 
  如果某个WAP设备可以支持任何图像格式,那么WBMP Type 0是最小的要求。

3. 有GIF/JPEG 到WBMP的转换器吗?

  有。在http://www.imagemagick.org。在同样有一个 Adobe photoshop 的插件。

4. 有没有实时转换GIF到WBMP的工具?

  可以试试:
  NetPBM:
  PBMtoWBMP:

5. 可以在WAP页面中混合声音和文本吗?

  不。很长一段时间内不会。这是因为电话的内存有限。但是你可以试一试 Palm 或者 Windows CE 的手持设备。

6. 有一个WBMP图片在Nokia Toolkit上能正常运行,但是在Nokia 7110上却不能是为什么?

  检查一下WML代码。确定IMG标签没有高度和宽度属性,这通常导致错误。另外一个原因是图像可能太大,造成当前的页面超过1400字节。

7. 当使用WBMP作为超链接等时,在7110模拟器上不工作,为什么?

  7110不支持图像作为链接。

8. WAP设备可以使用图形而不是文本吗?

  WAP协议允许使用一种叫做WBMP的图形标准,它是一个位(黑或者白)的BMP版本。因此,所有的图形,为了适合这个协议,必须转换成WBMP。
  在使用WBMP的时候当然有很多限制,图像的大小不能超过150 x 150 像素。这是因为WAP设备的屏幕都非常有限。例如Nokia 7110 屏幕是96像素宽,65像素高。因此 150 x 150 像素看起来就特别大,占据了整个屏幕。另外受WAP电话的内存限制,图像的大小不能超过 1461 字节。
  因为不是所有的WAP设备都能显示图像。因此,中的“alt”必须使用,这样才能适用于那些不能显示图像的WAP设备。
  “WAP Tiger”是一个非常简单的命令行BMP转换工具,可以去下载。有 MS-DOS/Windows 和 Linux 版本。
  可以在找到免费的Photoshop/Paint Shop Pro插件。
  Macromedia 有一个为 Fireworks的外接插件可以让用户输出WBMPs。PC版本在:
   
  Mac 版本在:
   

  WebCab.de有一个非常漂亮的在线WBMP编辑器:
   
  它能让你通过手工草稿生成、上传并编辑WBMP。如果只有服务器端的脚本语言程序,但是无法产生动态的WBMP,这是唯一的选择。
  在有一个免费的PIC2WBMP “独立”转换器。但是这个应用需要Java 运行环境。因此如果是个新手的话,最好是下载Paint Shop Pro 插件和最新的 Paint Shop Pro,网址是:
 
  Paint Shop Pro 对于没有注册的用户来说是有时间限制的SW。注册费用是 $99 USD 。
  Surerange Analysis Ltd 有一个免费的产品叫做ImageConvert Developer。它是一个单线程的ActiveX控件,可以将GIF和JPEG转换成WBMP。它同样有一个VC6的例子来说明如何使用。
  Applepie Solutions 提供一个在线的,基于WEB的GIF到WBMP的转换:
  http://www.applepiesolutions.com/image2.wbmp/
  如果指定用户想转换的文件的URL地址,它将让用户下载转换后的文件。
  在某些情况下用户想在HTML文档中显示WBMP。为了达到这个目的,Andre de Leiradella () 已经写了一个Java和C程序来从WBMP输出GIF,看起来就好像一个小的LCD显示器。C版本可以作为CGI。应用程序可以到下面的位置找到:
  。

9. 如何实现动画?

  WBMP图像不同于在HTML中广泛使用的GIF格式。它不支持动画。但是还是可以使用WML的 标签来创建一个。请注意这种方式不是能达到想象中效果的。
  通过研究Animated Images Demo可以有这方面的一点概念。其网址为:
 
  或者到:
 
  当在执行这样的动画方式的时候,要记住微型浏览器的内存是有限制的。不可能将所有的图片都装入到内存中。浏览器也不会装入那些过大的图片,因此某些动画可能在装入的时候就中断了。
  演示程序:


     "">
  
 
   
     
     


        Anim1
     


   

   
     
     


        Anim2
     


   

   
     
     


        Anim3
     


   

   
     
     


        Anim4
     


   

   
     


         This is the end of the animation, but you can
         run it again.
          
          

        

     


   

 


  如果使用PHP,可以看看更简单的程序:

    header("Content-type: text/vnd.wap.wml");
    echo("\n");
    echo("\"\">\n\n");
    echo("\n");
  ?>



      for($card=1;$card<5;$card++) {
      echo(""\n");
      echo("\n");
      echo("

\n");
      echo("\"Anim".$card."\"/\n");
      echo("

\n");
      echo("
\n");
    }
  ?>
 
 


    This is the end of the animation, but you can
    run it again.
     
     

   

 


 

 


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

  以上的代码是输出GIF的WBMP数据流。为了使用真正的图像,必须像下面这么写:

    header("Content-type: text/vnd.wap.wml");
    echo("\n");
    echo("\"\">\n\n");
    echo(" ?>

 
   
     
       
     

     


        alt="You should see an image…"/>
     


   

 


12. 针对多大的屏幕进行开发?

  WAP设备的显示状况千差万别,有些支持图形,有些只支持文本。下面给出一些型号的屏幕尺寸:Mitsubishi 还没有公布的WAP电话有3行12个字符的显示器。Nokia 7110 的屏幕是96个像素宽,65个像素高,最大的显示图像是95个像素宽,45的像素高,高和宽的比例大约是1.25。因此一个正方型应该是一个实际宽高比为1:1.25的长方形,对于圆来说也是一样。
  Ericsson's R320 有一个类似大小的显示屏幕。精确的大小是101像素宽,52像素高。可以显示4行文本,而且自动换行是默认的方式。
  Ed Chew() 检验过 “R380 Design Guideline for WAP Services”, 并且发现在Ericsson R380 有 360x120 像素的分辨率 (83x28mm),  0.23点距,浏览区域是限制在310(宽),100(高) pixels ,包括顶部的两个像素的空格,左边和右边的三个像素的空格,因此实际上只有304 x 98 像素。
  为了弄清显示器到底有多大的大小,在 (选择 “Resolution matrix”)有一个分辨矩阵的演示程序。 页面将显示三个不同大小的图像,一个垂直和一个水平,它们是一个方向上十个像素,另外一个方向上只有一个像素,这样你马上就能知道屏幕到底有多大。另外他们的大小是:80x80,100x100 和 120x120像素,因为有些浏览器不能装载那些过大的图片。
  由于有些显示器的点是长方形的,而不是正方形的,所以开发人员需要重新影射图像,让他们看起来像正方形,圆看起来像圆。但笔者不推荐这个方法,除非你知道用户所使用的WAP设备的真正比例。一个在7110上看起来很好的图到了R380上会很糟糕。

13. 在WML中可以预先装入图片吗?

  在HTML中,图片可以先使用简单的JavaScript来装入。但是在WML或者WMLScript中没有这样的方法。 Paul St. George()提供了一种欺骗浏览器,让它装入图片但不显示的办法。对于图片,如果足够小,可以事先读入到WAP的Cache中。如果所有的图像都能够装入的话,就不需要连接到服务器上了。
  首先需要一个能够撑满屏幕的透明图片,因此它们是一个像素宽,并且和显示屏幕具有相同的高度。将图片做成透明的,这样它将占据整个屏幕,然后装载剩下的图片,等图片装载完后timer启动,开始动画。
  在下面的例子中,可能需要改变一下timer的数值,让它有时间来装入图片。


   
   
   
     


        x
     


     


        1
     


     


        2
     


     


        3
     


     


        4
     


     


        5
     


   


   
     
     


        x
     


     


        1
     


   


   
     
     


        x
     


     


        2
     


   


   
     
     


        x
     


     


        3
     


   


   
     
     


        4
     


   


   
     
     


        5
     


   

 


14. 为什么有些WBMP无法显示?

  图像可以使用标签来指示。大多数无法显示的情况是因为错误地使用了语法。这个标记至少要有src和alt两个参数。其他参数是可选的。src指定图像的来源,alt指定当图像不能显示的时候显示的内容,并且在最后有反斜杠结尾。

  Alternative Text 

  如果页面是由HTTP服务器提供的,服务器也必须设置WBMP正确的MIME类型。正确的类型是“image/vnd.wap.wbmp”。
  问题也可能出在图像本身,因为WBMP的格式非常有限,只有黑白两色,而且大小要适合WAP设备。有些WAP开发工具让允许使用GIF图片,但是WAP设备只支持WBMP图片。

阅读(757) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~