search for in the  
<imagetypesimagexbm>
Last updated: Thu, 19 May 2005

imagewbmp

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

imagewbmp -- Output image to browser or file

Description

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

imagewbmp() creates the WBMP file in filename from the image image. The image argument is the return from the imagecreate() function.

The filename argument is optional, and if left off, the raw image stream will be output directly. By sending an image/vnd.wap.wbmp content-type using header(), you can create a PHP script that outputs WBMP images directly.

Note: WBMP support is only available if PHP was compiled against GD-1.8 or later.

Using the optional foreground parameter, you can set the foreground color. Use an identifier obtained from imagecolorallocate(). The default foreground color is black.

See also image2wbmp(), imagepng(), imagegif(), imagejpeg(), imagetypes().



User Contributed Notes
imagewbmp
lukeross at sys3175 dot co dot uk
28-Feb-2002 03: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 07:10
You could also use:

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

But I haven't test ist yet
flapper at redcube dot nl
22-May-2001 05: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.

<imagetypesimagexbm>
 Last updated: Thu, 19 May 2005
Copyright © 2001-2005 The PHP Group
All rights reserved.
This unofficial mirror is operated at: The Server Pages
Last updated: Thu May 19 17:35:34 2005 CDT