CakeFest 2024: The Official CakePHP Conference

imagewbmp

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

imagewbmpGörüntüyü tarayıcıya veya dosyaya yazar.

Açıklama

imagewbmp(GdImage $görüntü, resource|string|null $dosya = null, ?int $artalan = null): bool

Belirtilen görüntüyü WBMP biçemli olarak çıktılar veya kaydeder.

Bağımsız Değişkenler

görüntü

imagecreatetruecolor() gibi bir görüntü oluşturma işlevinden dönen bir GdImage nesnesi.

dosya

Dosyanın kaydedileceği yol veya işlev döndüğünde kendiliğinden kapanan açık bir akım kaynağı. null atanırsa veya hiçbir şey atanmazsa doğrudan ham görüntü akımı çıktılanır.

artalan

imagecolorallocate() tarafından sağlanmış bir tanıtıcı ile bir artalan rengi tanımlayabilirsiniz. Öntanımlı artalan rengi siyahtır.

Dönen Değerler

Başarı durumunda true, başarısızlık durumunda false döner.

Dikkat

Ancak, libgd görüntüyü çıktılamakta başarısız olursa bu işlev true döndürür.

Sürüm Bilgisi

Sürüm: Açıklama
8.0.0 görüntü bağımsız değişkeninde artık bir GdImage nesnesi aktarmak gerekiyor; evvelce resource türünde geçerli bir gd değeri gerekirdi.
8.0.0 artalan artık null olabiliyor.

Örnekler

Örnek 1 - Bir WBMP görüntüyü çıktılamak

<?php
// Boş bir görüntü oluşturup üzerine bir metin ekle
$resim = imagecreatetruecolor(120, 20);
$metin_rengi = imagecolorallocate($resim, 233, 14, 91);
imagestring($resim, 1, 5, 5, 'Bir deneme dizgesi', $metin_rengi);

// İçerik türü başlığını ayarla: image/vnd.wap.wbmp
// İpucu: içerik türleri için image_type_to_mime_type() işlevine bakılabilir
header('Content-Type: image/vnd.wap.wbmp');

// Görüntüyü çıktıla
imagewbmp($resim);

// Belleği serbest bırak
imagedestroy($resim);
?>

Örnek 2 - Bir WBMP görüntünün kaydedilmesi

<?php
// Boş bir görüntü oluşturup üzerine bir metin ekle
$resim = imagecreatetruecolor(120, 20);
$metin_rengi = imagecolorallocate($resim, 233, 14, 91);
imagestring($resim, 1, 5, 5, 'Bir deneme dizgesi', $metin_rengi);

// Görüntüyü kaydet
imagewbmp($im, 'dnm.wbmp');

// Belleği serbest bırak
imagedestroy($im);
?>

Örnek 3 - Görüntüyü farklı bir artalan rengi ile çıktılamak

<?php
// Boş bir görüntü oluşturup üzerine bir metin ekle
$resim = imagecreatetruecolor(120, 20);
$metin_rengi = imagecolorallocate($resim, 233, 14, 91);
imagestring($resim, 1, 5, 5, 'Bir deneme dizgesi', $metin_rengi);

// İçerik türü başlığını ayarla: image/vnd.wap.wbmp
// İpucu: içerik türleri için image_type_to_mime_type() işlevine bakılabilir
header('Content-Type: image/vnd.wap.wbmp');

// Yeni artalan rengini ayarla
$artalan_rengi = imagecolorallocate($resim, 255, 0, 0);

imagewbmp($resim, NULL, $artalan_rengi);

// Belleği serbest bırak
imagedestroy($resim);
?>

Ayrıca Bakınız

  • image2wbmp() - Görüntüyü tarayıcıya veya dosyaya yazar.
  • imagepng() - Tarayıcıya veya bir dosyaya bir PNG görüntü çıktılar
  • imagegif() - Görüntüyü tarayıcıya veya dosyaya yazar.
  • imagejpeg() - Görüntüyü tarayıcıya veya dosyaya yazar.
  • imagetypes() - Kurulu PHP'nin desteklediği görüntü türlerini döndürür
add a note

User Contributed Notes 2 notes

up
1
andre at bynetworld dot com
16 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
22 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));
To Top