Bild verkleinern mit falschen schwarzen Hintergrund

Schumiel

Erfahrenes Mitglied
Hallo,

lasse ich folgendes Script durchlaufen und lasse es mir über "img" anzeigen, wird das im Bild schwarz angezeigt, das transparent im GIF-Bild ist. Ich möcht es aber gern in weiß. Was muss ich dafür tun?

PHP:
$Grafikdatei = $filefoto;

$Bilddaten = getimagesize($Grafikdatei);

$OriginalBreite = $Bilddaten[0];
$OriginalHoehe = $Bilddaten[1];
$ThumbnailBreite = 20;

if($OriginalBreite < $ThumbnailBreite)
{
$ThumbnailBreite=$OriginalBreite;
}

$Skalierungsfaktor = $OriginalBreite/$ThumbnailBreite;
$ThumbnailHoehe = intval($OriginalHoehe/$Skalierungsfaktor);

if($Bilddaten[2] == 1)
{
$Originalgrafik = ImageCreateFromGIF($Grafikdatei);
$Thumbnailgrafik = ImageCreateTrueColor($ThumbnailBreite, $ThumbnailHoehe);
imagecopyresampled($Thumbnailgrafik, $Originalgrafik, 0, 0, 0, 0, $ThumbnailBreite, $ThumbnailHoehe, $OriginalBreite, $OriginalHoehe);
ImageGIF($Thumbnailgrafik, "test.gif", 100);
 
Dieses Beispiel aus dem Manual sollte dir helfen:

If you want to create a *transparent* PNG image, where the background is fully transparent, and all draw operations happen on-top of this, then do the following:
PHP:
<?php
    $png = imagecreatetruecolor(800, 600);
    imagesavealpha($png, true);

    $trans_colour = imagecolorallocatealpha($png, 0, 0, 0, 127);
    imagefill($png, 0, 0, $trans_colour);
   
    $red = imagecolorallocate($png, 255, 0, 0);
    imagefilledellipse($png, 400, 300, 400, 300, $red);
   
    header("Content-type: image/png");
    imagepng($png);
?>

What you do is create a true colour image, make sure that the alpha save-state is on, then fill the image with a colour that has had its alpha level set to fully transparent (127).

The resulting PNG from the code above will have a red circle on a fully transparent background (drag the image into Photoshop to see for yourself)
 
Diese Zeile:
PHP:
$Thumbnailgrafik = ImageCreateTrueColor($ThumbnailBreite, $ThumbnailHoehe);
ersetzen durch:
PHP:
$Thumbnailgrafik = ImageCreateTrueColor($ThumbnailBreite, $ThumbnailHoehe);  
imagesavealpha($Thumbnailgrafik , true);
$trans_colour = imagecolorallocatealpha($Thumbnailgrafik , 0, 0, 0, 127);
imagefill($Thumbnailgrafik , 0, 0, $trans_colour);

ungetestet!
 
Hatte ich irgendwann mal gelesen und in Erinnerung behalten. Den Link finde ich nicht mehr:

imagecopyresampled() verändert die Palette des Bildes. Du solltest in diesem Fall imagecopyresized() verwenden, auch wenn da eine schlechtere Qualität heraus kommt.
 
Zurück