文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>关于WBMP的若干问题

关于WBMP的若干问题

时间:2006-06-16  来源:barterr

关于WBMP的若干问题 【摘自Devsky WAP论坛,特此鸣谢】 1. 如何创建WBMP?

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

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

  WAP标准规定的BMP格式WBMP。WBMP Type 0是一个简单的黑白,非压缩的BMP格式。细节可以参考:
  http://www1.wapforum.org/tech/terms.asp?doc=SPEC-WAESpec-19990524.pdf
  如果某个WAP设备可以支持任何图像格式,那么WBMP Type 0是最小的要求。

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

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

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

  可以试试:
  NetPBM:ftp://wuarchive.wustl.edu/graphics/graphics/packages/NetPBM/
  PBMtoWBMP:http://www.looplab.com/WAP/tools/

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设备都能显示图像。因此,<img>中的“alt”必须使用,这样才能适用于那些不能显示图像的WAP设备。
  “WAP Tiger”是一个非常简单的命令行BMP转换工具,可以去http://wap.infotiger.de/download.html下载。有 MS-DOS/Windows 和 Linux 版本。
  可以在http://www.rcp.co.uk/distributed/Downloads找到免费的Photoshop/Paint Shop Pro插件。
  Macromedia 有一个为 Fireworks的外接插件可以让用户输出WBMPs。PC版本在:
    http://download.macromedia.com/pub/fireworks/xtras/wbmp_im_ex.exe
  Mac 版本在:
    http://download.macromedia.com/pub/fireworks/xtras/wbmp_im_ex.hqx

  WebCab.de有一个非常漂亮的在线WBMP编辑器:
    http://webcab.de/woe.htm
  它能让你通过手工草稿生成、上传并编辑WBMP。如果只有服务器端的脚本语言程序,但是无法产生动态的WBMP,这是唯一的选择。
  在http://www.gingco.de/wap/有一个免费的PIC2WBMP “独立”转换器。但是这个应用需要Java 运行环境。因此如果是个新手的话,最好是下载Paint Shop Pro 插件和最新的 Paint Shop Pro,网址是:
  http://www.jasc.com/download.html
  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 ([email protected]) 已经写了一个Java和C程序来从WBMP输出GIF,看起来就好像一个小的LCD显示器。C版本可以作为CGI。应用程序可以到下面的位置找到:
  http://members.xoom.com/leiradel/。

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\">\n\n");
    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);
  ?>

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

<?
    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\">\n\n");
    echo("<!—Code written in Microsoft NOTEPAD.EXE. (c) Espen Lyngaas 2000 Color Line ASA à \n");
 ?>

  <wml>
    <card id="wapclock" title="WAP Clock">
      <do type="prev" label="Reload Image">
        <go href="<?echo($PHP_SELF)?> "/>
      </do>
      <p>
        <img src="http://wap.colorline.no/wap-faq/apps/gfxclock.html?format=wbmp"
alt="You should see an image…"/>
      </p>
    </card>
  </wml>

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([email protected]) 检验过 “R380 Design Guideline for WAP Services”, 并且发现在Ericsson R380 有 360x120 像素的分辨率 (83x28mm),  0.23点距,浏览区域是限制在310(宽),100(高) pixels ,包括顶部的两个像素的空格,左边和右边的三个像素的空格,因此实际上只有304 x 98 像素。
  为了弄清显示器到底有多大的大小,在http://wap.colorline.no/demos.html (选择 “Resolution matrix”)有一个分辨矩阵的演示程序。 页面将显示三个不同大小的图像,一个垂直和一个水平,它们是一个方向上十个像素,另外一个方向上只有一个像素,这样你马上就能知道屏幕到底有多大。另外他们的大小是:80x80,100x100 和 120x120像素,因为有些浏览器不能装载那些过大的图片。
  由于有些显示器的点是长方形的,而不是正方形的,所以开发人员需要重新影射图像,让他们看起来像正方形,圆看起来像圆。但笔者不推荐这个方法,除非你知道用户所使用的WAP设备的真正比例。一个在7110上看起来很好的图到了R380上会很糟糕。

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

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

<wml>
    <card id="p" ontimer="#f1">
    <!-- Adjust this timer to taste. -->
    <timer value="10"/>
      <p align="center">
        <img src="spacer1.wbmp" alt="x"/>
      </p>
      <p>
        <img src="1.wbmp" alt="1"/>
      </p>
      <p>
        <img src="2.wbmp" alt="2"/>
      </p>
      <p>
        <img src="3.wbmp" alt="3"/>
      </p>
      <p>
        <img src="4.wbmp" alt="4"/>
      </p>
      <p>
        <img src="5.wbmp" alt="5"/>
      </p>
    </card>

    <card id="f1" ontimer="#f2">
      <timer value="10"/>
      <p align="center">
        <img src="spacer15.wbmp" alt="x"/>
      </p>
      <p align="center">
        <img src="1.wbmp" alt="1"/>
      </p>
    </card>

    <card id="f2" ontimer="#f3">
      <timer value="10"/>
      <p align="center">
        <img src="spacer10.wbmp" alt="x"/>
      </p>
      <p align="center">
        <img src="2.wbmp" alt="2"/>
      </p>
    </card>

    <card id="f3" ontimer="#f4">
      <timer value="10"/>
      <p align="center">
        <img src="spacer08.wbmp" alt="x"/>
      </p>
      <p align="center">
        <img src="3.wbmp" alt="3"/>
      </p>
    </card>

    <card id="f4" ontimer="#f5">
      <timer value="10"/>
      <p align="center">
        <img src="4.wbmp" alt="4"/>
      </p>
    </card>

    <card id="f5" ontimer="#f1">
      <timer value="10"/>
      <p align="center">
        <img src="5.wbmp" alt="5"/>
      </p>
    </card>
  </wml>

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

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

  <img src="path/filename.wbmp" alt="Alternative Text"/> 

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

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载