imagewbmp

(PHP 3 >= 3.0.15, PHP 4 >= 4.0.1, PHP 5)

imagewbmp -- 以 WBMP 格式将图像输出到浏览器或文件

说明

bool imagewbmp ( resource image [, string filename [, int foreground]] )

imagewbmp()image 图像创建一个名为 filenameWBMP 文件。image 参数是 imagecreatetruecolor() 的返回值。

filename 参数是可选项,如果省略,则直接将原图像流输出。通过用 header() 发送 image/vnd.wap.wbmp 的 Content-type,可以创建直接输出 WBMP 图像的 PHP 脚本。

注: WBMP 支持仅能用于 PHP 编译时加入了 GD-1.8 或更高版本时。

用可选的 foreground 参数可以设定前景色,用 imagecolorallocate() 函数返回的颜色标识符。默认前景色是黑色。

参见 image2wbmp()imagepng()imagegif()imagejpeg()imagetypes()


add a note add a note User Contributed Notes
lukeross at sys3175 dot co dot uk
01-Mar-2002 05:57
As has been commented before, GD doesnt do a very good translation to 2-colours, especially for photos.  The following routine converts to two colours, I believe using error diffusion (the algorithm's nicked off news).  It's slow, but just about adequate for small images and low load.  I suspect it can be made much more efficient :-)

function ImageColorFloydSteinberg($dst_img, $src_img) {
   ImageColorAllocate($dst_img, 0,0,0);
   ImageColorAllocate($dst_img, 255,255,255);
   $grey_img = ImageCreate(ImageSX($src_img), ImageSY($src_img));
   for ($a = 0; $a <= 255; $a++) ImageColorAllocate($grey_img, $a,$a,$a);
   for($x = 0; $x <= ImageSX($src_img); $x++) {
       for($y = 0; $y <= ImageSY($src_img); $y++) {
           $color = ImageColorsForIndex($src_img, ImageColorAt($src_img, $x, $y));
           $greyscale = .299 * $color["red"] + .587 * $color["green"] + .114 * $color["blue"];
           ImageSetPixel($grey_img, $x, $y, ImageColorClosest($grey_img, $greyscale, $greyscale, $greyscale));
       }
   }
   for($x = 0; $x <= ImageSX($src_img); $x++) {
       for($y = 0; $y <= ImageSY($src_img); $y++) {
           $color = ImageColorsForIndex($grey_img, ImageColorAt($grey_img, $x, $y));
           if ($color["red"] > 128) {
               ImageSetPixel($dst_img, $x, $y, ImageColorClosest($dst_img,255,255,255));
               $err = $color["red"] - 255;
           } else {
               ImageSetPixel($dst_img, $x, $y, ImageColorClosest($dst_img,0,0,0));
               $err = $color["red"];
           }
           if ($x != ImageSx($src_img)) {
               $color2 = ImageColorsForIndex($grey_img, ImageColorAt($grey_img, $x+1, $y));
               $newgrey = $color2["red"] + $err * 7 / 16;
               ImageSetPixel($grey_img, $x+1, $y, ImageColorClosest($grey_img,$newgrey, $newgrey, $newgrey));
           }
           if ($x != 0) {
               $color2 = ImageColorsForIndex($grey_img, ImageColorAt($grey_img, $x-1, $y));
               $newgrey = $color2["red"] + $err * 3 / 16;
               ImageSetPixel($grey_img, $x-1, $y, ImageColorClosest($grey_img,$newgrey, $newgrey, $newgrey));
           }
           if ($y != ImageSy($src_img)) {
               $color2 = ImageColorsForIndex($grey_img, ImageColorAt($grey_img, $x, $y+1));
               $newgrey = $color2["red"] + $err * 5 / 16;
               ImageSetPixel($grey_img, $x, $y+1, ImageColorClosest($grey_img,$newgrey, $newgrey, $newgrey));
           }
           if ($x != ImageSx($src_img) && $y != ImageSy($src_img)) {
               $color2 = ImageColorsForIndex($grey_img, ImageColorAt($grey_img, $x+1, $y+1));
               $newgrey = $color2["red"] + $err / 16;
               ImageSetPixel($grey_img, $x+1, $y+1, ImageColorClosest($grey_img,$newgrey, $newgrey, $newgrey));
           }
          
       }
   }
   imagedestroy($grey_img);
}

To output your WBMP, use

ImageWBMP($final_img, "", ImageColorClosest(255,255,255));
marius
17-Jul-2001 08:10
You could also use:

@ImageWbmp ($im, "test.wbmp");

But I haven't test ist yet
flapper at redcube dot nl
23-May-2001 06:34
There is a hidden third parameter in the ImageWbmp function that serves as a threshold-holder. When using the function as in:

ImageWbmp ($im, "test.wbmp");

it generates a warning:

Warning: imagewbmp: invalid threshold value '-1'. It must be between 0 and 255 in blablabla

It does generate the image though but for a WML app. it cannot be used since the warning is laden with HTML-tags. To prevent the warning use the following example:

ImageWbmp ($im, "test.wbmp", 0);

The warning is no longer generated.