Ankündigung

Einklappen
Keine Ankündigung bisher.

Zwei PNGs mit Transparenz in ein neues Bild koperen!?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Zwei PNGs mit Transparenz in ein neues Bild koperen!?

    Hallo,

    bevor die Rufe kommen: Ich hab lange gesucht (hier und auf php.net), aber ich komm nicht weiter. Ich bin mir sicher, es fehlt nur ein Tick...

    Situation:
    - Ich habe ein 24-Bit-PNG-Bild und möchte in dieses ein zweites 24-Bit-PNG-Bild kopieren.
    - Im zweiten Bild soll Farbe Rot (255,0,0) transparent sein, d.h. "nicht mitkopiert" werden. Und genau da hapert es.

    Mein Script kopiert brav die beiden Bilder ineinander, aber mit der Farbe rot (die ja transparent sein soll... ). Bild 1 enthält kein Rot.

    Wo liegt mein Denkfehler? Erstellt wurden die Grafiken mit Photoshop, save-as-web PNG24 mit Transparenz.

    Bin für jede Hilfe dankbar! (PNG ist kein Muss, GIF und JPG würden auch gehen, wenn es da einfacher ist.)

    Hier mein Script:

    Code:
    <?php 
    
    $dest = @ImageCreateFromPNG("grafik1.png");
    imageAlphaBlending($dest, true);
    imageSaveAlpha($dest, true);
    $red    = imagecolorallocatealpha($dest, 255, 0, 0,127);
    imagecolortransparent($dest, $red);
    
    
    $source = @ImageCreateFromPNG("grafik2.png");
    imageAlphaBlending($source, true);
    imageSaveAlpha($source, true);
    $red    = imagecolorallocatealpha($source, 255, 0, 0,127);
    imagecolortransparent($source, $red);
    ImageAlphaBlending($source, true);
    
    imagecopy($dest, $source, 20, 5, 0, 0, 141, 17 );
    
    header("Content-type: image/png"); 
    imagepng($dest); 
    ImageDestroy();
     
    ?>
    Gruß
    Blik

  • #2
    mit imagecopymerge funktioniert es bei mir
    PHP-Code:
    <?php
    $imgA 
    imagecreatefrompng('a.png') or die('Fehler a');
    $imgB imagecreatefrompng('b.png') or die('Fehler b');

    $colorRedA imagecolorallocate($imgA25500);
    $colorRedB imagecolorallocate($imgB25500);

    imagecolortransparent($imgA $colorRedA ) or die('Fehler transparent A');
    imagecolortransparent($imgB $colorRedB ) or die('Fehler transparent B');

    // imagecopy ($imgA, $imgB, 0, 0, 0, 0, imagesx($imgB), imagesy($imgB)); <- so nicht
    imagecopymerge($imgA$imgB0000imagesx($imgA), imagesx($imgB), 100) or die('Fehler copymerge');

    if(!
    headers_sent()) {
        
    header('Content-type: image/png');
        
    imagepng($imgA);
    }
    ?>

    Kommentar


    • #3
      Danke, der Befehl hat mir gefehlt!

      Es sind immer diese miesen Kleinigkeiten... den Befehl hab ich noch nicht bemerkt.

      Gruß
      Blik

      Kommentar

      Lädt...
      X