imagewbmp

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

imagewbmpEnvia a imagem para o navegador ou para um arquivo

Descrição

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

imagewbmp() mostra ou grava uma versão WBMP da imagem informada em image.

Parâmetros

image

Um objeto GdImage, retornado por uma das funções de criação de imagem, como imagecreatetruecolor().

file

O caminho ou um recurso de stream aberto (que será fechado automaticamente após o retorno desta função) para salvar o arquivo. Se não for definido ou for null, o stream da imagem bruta será enviado diretamente.

foreground_color

Pode-se definir a cor de primeiro plano com este parâmetro, configurando-se um identificador obtido a partir da função imagecolorallocate(). A cor de primeiro plano padrão é preta.

Valor Retornado

Retorna true em caso de sucesso ou false em caso de falha.

Cuidado

Entretanto, se a biblioteca libgd falhar ao gerar a imagem, esta função retornará true.

Registro de Alterações

Versão Descrição
8.0.0 O parâmetro image agora espera uma instância de GdImage; anteriormente, um resource gd válido era esperado.
8.0.0 foreground_color agora pode ser nulo.

Exemplos

Exemplo #1 Mostrando uma imagem WBMP

<?php
// Cria uma imagem vazia e adiciona texto
$im = imagecreatetruecolor(120, 20);
$text_color = imagecolorallocate($im, 233, 14, 91);
imagestring($im, 1, 5, 5, 'A Simple Text String', $text_color);

// Define o cabeçalho de tipo de conteúdo - neste caso image/vnd.wap.wbmp
// Dica: veja image_type_to_mime_type() para tipos de conteúdo
header('Content-Type: image/vnd.wap.wbmp');

// Mostra a imagem
imagewbmp($im);
?>

Exemplo #2 Gravando a imagem WBMP

<?php
// Cria uma imagem vazia e adiciona texto
$im = imagecreatetruecolor(120, 20);
$text_color = imagecolorallocate($im, 233, 14, 91);
imagestring($im, 1, 5, 5, 'A Simple Text String', $text_color);

// Grava a imagem
imagewbmp($im, 'simpletext.wbmp');
?>

Exemplo #3 Mostrando a imagem com primeiro plano diferente

<?php
// Cria uma imagem vazia e adiciona texto
$im = imagecreatetruecolor(120, 20);
$text_color = imagecolorallocate($im, 233, 14, 91);
imagestring($im, 1, 5, 5, 'A Simple Text String', $text_color);

// Define o cabeçalho de tipo de conteúdo - neste caso image/vnd.wap.wbmp
// Dica: veja image_type_to_mime_type() para tipos de conteúdo
header('Content-Type: image/vnd.wap.wbmp');

// Define uma cor substituta para primeiro plano
$foreground_color = imagecolorallocate($im, 255, 0, 0);

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

Veja Também

  • image2wbmp() - Envia a imagem para o navegador ou para um arquivo
  • imagepng() - Envia uma imagem PNG para o navegador ou arquivo
  • imagegif() - Envia a imagem para o navegador ou para um arquivo
  • imagejpeg() - Envia a imagem para o navegador ou para um arquivo
  • imagetypes() - Retorna os tipos de imagens suportados pela instalação do PHP
adicione uma nota

Notas Enviadas por Usuários (em inglês) 2 notes

up
1
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
0
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, useImageWBMP($final_img, "", ImageColorClosest(255,255,255));
To Top