PHP 8.5.0 Released!

imagewbmp

(PHP 4 >= 4.0.1, PHP 5, PHP 7, PHP 8)

imagewbmpOutput image to browser or file

Description

imagewbmp(GdImage $image, resource |string |null $file = null , ? int $foreground_color = null ): bool

imagewbmp() outputs or save a WBMP version of the given image.

Parameters

image

A GdImage object, returned by one of the image creation functions, such as imagecreatetruecolor() .

file

The path or an open stream resource (which is automatically closed after this function returns) to save the file to. If not set or null , the raw image stream will be output directly.

foreground_color

You can set the foreground color with this parameter by setting an identifier obtained from imagecolorallocate() . The default foreground color is black.

Return Values

Returns true on success or false on failure.

Caution

However, if libgd fails to output the image, this function returns true .

Changelog

Version Description
8.0.0 image expects a GdImage instance now; previously, a valid gd resource was expected.
8.0.0 foreground_color is nullable now.

Examples

Example #1 Outputting a WBMP image

<?php
// Create a blank image and add some text
$im = imagecreatetruecolor(120, 20);
$text_color = imagecolorallocate($im, 233, 14, 91);
imagestring($im, 1, 5, 5, 'A Simple Text String', $text_color);

// Set the content type header - in this case image/vnd.wap.wbmp
// Hint: see image_type_to_mime_type() for content-types
header('Content-Type: image/vnd.wap.wbmp');

// Output the image
imagewbmp($im);
?>

Example #2 Saving the WBMP image

<?php
// Create a blank image and add some text
$im = imagecreatetruecolor(120, 20);
$text_color = imagecolorallocate($im, 233, 14, 91);
imagestring($im, 1, 5, 5, 'A Simple Text String', $text_color);

// Save the image
imagewbmp($im, 'simpletext.wbmp');
?>

Example #3 Outputting the image with a different foreground

<?php
// Create a blank image and add some text
$im = imagecreatetruecolor(120, 20);
$text_color = imagecolorallocate($im, 233, 14, 91);
imagestring($im, 1, 5, 5, 'A Simple Text String', $text_color);

// Set the content type header - in this case image/vnd.wap.wbmp
// Hint: see image_type_to_mime_type() for content-types
header('Content-Type: image/vnd.wap.wbmp');

// Set a replacement foreground color
$foreground_color = imagecolorallocate($im, 255, 0, 0);

imagewbmp($im, NULL, $foreground_color);
?>

See Also

Found A Problem?

Learn How To Improve This PageSubmit a Pull RequestReport a Bug
+add a note

User Contributed Notes 2 notes

up
2
andre at bynetworld dot com
17 years ago
In the previous note by -> lukeross at sys3175 dot co dot uk <- there is a coding error in the for() loops. After correcting the error, I found that this function did a great job of converting color images to 2 colors.
The following is the corrected function code:
function ImageColorFloydSteinberg($dst_img, $src_img) {
 ImageColorAllocate($dst_img, 0,0,0);
 ImageColorAllocate($dst_img, 255,255,255);
 $isx = ImageSX($src_img);
 $isy = ImageSY($src_img);
 $grey_img = ImageCreate($isx, $isy);
 for ($a = 0; $a <= 255; $a++) ImageColorAllocate($grey_img, $a,$a,$a);
 $isx -= 1; // To correct pixel count in source image width starting from 0
 $isy -= 1; // Correcting pixel count in source image height starting from 0
 for($x = 0; $x <= $isx; $x++) {
 for($y = 0; $y <= $isy; $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 <= $isx; $x++) {
 for($y = 0; $y <= $isy; $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 != $isx) {
 $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 != $isy) {
 $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 != $isx && $y != $isy) {
 $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);
}
up
1
lukeross at sys3175 dot co dot uk
23 years ago
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));
+add a note

AltStyle によって変換されたページ (->オリジナル) /