关于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图片。
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图片。
相关阅读 更多 +