• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Bildebenen vereinen mit Alphatransparenz

Körnerbrötchen

Aktives Mitglied
Hallo zusammen,
ich habe mich nun wieder einmal mit ein bisschen Bilderstellung in PHP beschäftigt, denn ich habe folgendes vor:
1. Ich möchte einen einfarbigen Hintergrund erstellen.
2. Darüber möchte ich ein PNG-Bild legen, welches transparente und halbtransparente Bereiche enthält.

Also habe ich mich ein wenig umgeschaut, die passenden Funktionen unter PHP gesucht und bin zu folgendem Ergebnis gekommen:
PHP:
<?php 
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', 1);

function imagecolorize ($img_orig, $img_new, $opacity, $pfad, $r=0, $g=0, $b=0) {
    // Kopie des Originalbildes erstellen
    $img = imagecreatefrompng($pfad.$img_orig);

    // Bildbreite und -höhe ermitteln
    $img_width = imagesx($img);
    $img_height = imagesy($img);

    // Layer anlegen
    $layer = imagecreate($img_width, $img_height);

    // Alphatransparenz behalten
    imagealphablending($img, true);
    imagealphablending($layer, true);

    // Farbe zuordnen
    $color = imagecolorallocate($layer, $r, $g, $b);
    
    // Layer mit der Farbe fuellen
    $fill = imagefill($layer, 0, 0, $color);

    // Layer und Bildkopie "mergen"
    $merge = imagecopymerge($layer, $img, 0, 0, 0, 0, $img_width, $img_height, $opacity);

    // Bild abspeichern
    imagepng($img, $pfad.$img_new);

    // Layer vernichten
    imagedestroy($layer);

    // Originalbild vernichten
    imagedestroy($img);
}

// Parameter
$img_orig = "feld3.png"; // Name Originalbild
$img_new = "testneu.png"; // Name neues (gefaerbtes) Bild
$opacity = 50; // Deckkraft (Wert zwischen 0 (transparent) und 100 (deckend)
$pfad = "/var/www/sckunst/img/"; // Physikalischer Pfad zum Bilderordner (mit $_SERVER['DOCUMENT_ROOT'] zu ermitteln, dann noch Verzeichnis dranhaengen)
$r = 255; // rot
$g = 50; // grün
$b = 80; // blau

imagecolorize($img_orig, $img_new, $opacity, $pfad, $r, $g, $b);
?>
Ist aber blöd, denn das darüber gelegte Bild ist nicht transparent, sondern wird durch die im PNG hinterlegte Ersatzfarbe ersetzt. Wo ist mein Fehler?

Viele Grüße
Körnerbrötchen
 
Werbung:
Zurück
Oben