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 imagecreatetruecolor() 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.

Замечание: 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().



imagewbmp
lukeross at sys3175 dot co dot uk
28-Feb-2002 01: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 05:10
You could also use:

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

But I haven't test ist yet
flapper at redcube dot nl
22-May-2001 03: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: Tue, 15 Nov 2005