Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] imagecopymerge() - Transparenz?

Einklappen

Neue Werbung 2019

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

  • [Erledigt] imagecopymerge() - Transparenz?

    Hallo Leute! Heute habe ich versucht einen "Schriftengenerator" für eine bestimmte Schriftart zur erstellen. Diese lässt sich leider nicht konvertieren, da bestimmte Farbtöne von Nöten sind.

    Vorerst zur Info, ein normaler Buchstabe sieht so aus:



    Wie es nach dem konvertieren aussieht:



    Der Code:

    PHP-Code:
    <?php
      header
    ('Content-type: image/png');
      
    $chars $_GET['c'];
      
    $chars_array str_split($_GET['c']);
      
    $length strlen($chars);
      
      
    $im imagecreate($length 100,100);
      
      
    $white imagecolorallocatealpha($im25525525575);
      
    imagefill($im00$white);
      
      
    $img_w imagesx$im );
      
    $img_h imagesy$im );
      
      
    $x 0;
      
      foreach(
    $chars_array as $char)
      {
         
    $img_x imagesximagecreatefrompng 'chars/'.$char.'.png') );
         
    $img_y imagesyimagecreatefrompng 'chars/'.$char.'.png') );
        
    imagecopymerge($im,
                      
    imagecreatefrompng'chars/'.$char.'.png' ),
                      
    $x,
                      
    0,
                      
    0,
                      
    0,
                      
    $img_x,
                      
    $img_y,
                      
    100);

                      
    $x $x $img_x 2;
      }
                     
      
    imagepng($im);
      
    imagedestroy($im);
    ?>
    Mein genaues Problem, bzw. das was ich schon versucht oder rausgefunden habe: Das mit imageallocatealpha, das man damit den Hintergrund quasi Transparent machen kann. Dies hab ich dann auch geschafft. Nun erzeugen aber die .PNG Bilder (obwohl ich imagecreatefrompng genutzt habe) einen Hintergrund. Deshalb hatte ich schon versucht die Bilder erst neu zu erzeugen und dann einzufügen, aber das hat auch nicht funktioniert. Bin mittlerweile am verzweifeln, da mir keine andere Funktion zur Verfügung steht.

  • #2
    Zitat von Astinos Beitrag anzeigen
    Bin mittlerweile am verzweifeln, da mir keine andere Funktion zur Verfügung steht.
    imagesavealpha() vergessen?. Rest verrät dir Google. Das Thema PHP+GD+PNG+Alphatransparenz wurde schon SEHR oft behandelt.

    "php png alpha transpareny" zu googlen schadet auch nicht.

    Kommentar


    • #3
      Danke! Also die Antwort hab ich hier gefunden, copymerge() in copy() umgewandelt und schon hat es super funktioniert!

      http://www.devnetwork.net/viewtopic.php?f=40&t=84287

      Kommentar


      • #4
        Zitat von Astinos Beitrag anzeigen
        Danke! Also die Antwort hab ich hier gefunden, copymerge() in copy() umgewandelt und schon hat es super funktioniert!

        http://www.devnetwork.net/viewtopic.php?f=40&t=84287
        Ein Blick ins Handbuch von imagecopymerge() hätte dir das nicht nur verraten, sondern auch direkt erklärt warum das so ist:

        pct

        The two images will be merged according to pct which can range from 0 to 100. When pct = 0, no action is taken, when 100 this function behaves identically to imagecopy() for pallete images, while it implements alpha transparency for true colour images.

        Kommentar


        • #5
          PHP-Code:
            foreach($chars_array as $char
            { 
               
          $img_x imagesximagecreatefrompng 'chars/'.$char.'.png') ); 
               
          $img_y imagesyimagecreatefrompng 'chars/'.$char.'.png') ); 
              
          imagecopymerge($im
                            
          imagecreatefrompng'chars/'.$char.'.png' ), 
          Schönes Speicherleck... drei mal (pro Schleifendurchlauf!) das Char-PNG geöffnet, ohne es wieder freizugeben.

          Du darfst mit Systemresourcen nicht so sorglos umgehen, schon gar nicht in einer Multi-User Umgebung.

          PHP-Code:
          foreach($chars_array as $char)  {
            
          $the_char imagecreatefrompng 'chars/'.$char.'.png');

            
          $img_x imagesx$the_char ); 
            
          $img_y imagesy$the_char ); 
            
          imagecopymerge($im$the_char, ...
          ...
            
          imagedestroy($the_char);

          Kommentar

          Lädt...
          X