Matze: Problem mit Alpha-Blending und Anti-Alias bei TTF

Hallo!

Mit PHP erstelle ich eine Grafik und kopiere ein PNG-Bild hinein.
Das PNG-Bild hat verschiedene alpha-transparente Bereiche.

Mit

imagesavealpha($img, true);  
imagealphablending($img, false);

bleiben die alpha-Transparenten Bereiche erhalten.

Wenn ich jetzt aber einen TTF-Text in das Bild schreibe:

imagettftext($img, 14, 0, 210, 50, $white, "arialbd.ttf", 'This is a test.');

wird das PNG in einem Rechteck in Größe des Buchstaben unter der Schrift transparent und man sieht den Hintergrund des darunter liegenden Elements (oder die Browserhintergrundfarbe ebend).

Das Problem ist das (?) Anti-Alias bei TTF-Text in Verbindung mit Alpha-Blending.

Wenn ich diesen Teil

imagesavealpha($img, true);  
imagealphablending($img, false);

auskommentiere, geht mir erwartungsgemäß der alpha-blending-Effekt verloren, der TTF-Text steht aber mit schönem Anti-Alias da.

Wenn ich den Text ohne anti-alias schreibe:
imagettftext($img, 14, 0, 210, 50, -$white, "arialbd.ttf", 'This is a test.');

Bleibt mir alpha-blending, ich habe keine transparenten Bereiche unter den Buchstaben im PNG aber der Text sieht ohne Anti-Alias dafür sehr bescheiden aus :(

Google gab mir leider nur zu jeweils einer Sache Auskunft (alpha-blending o. ttf-text) aber ich habe nichts über die Verbindung der beiden Sachen gefunden.

Könnte mir bitte jemand sagen wie ich Alpha-Blending und Anti-Alias bei TTF-Text unter einen Hut kriege?

Danke und Grüße, Matze

  1. Nur eine kurze Idee (habe gerade selber mit GD ein kleines Bildbearbeitungstool erstellt). Führst du die Befehle auch in der Reihenfolge aus, wie du sie geschrieben hast? 1.imagesavealpha 2.imagealphablending? Gemäss PHP Dokumentation, würde die umgekehrte Reihenfolge eher Sinn machen.

    1. Nur eine kurze Idee (habe gerade selber mit GD ein kleines Bildbearbeitungstool erstellt). Führst du die Befehle auch in der Reihenfolge aus, wie du sie geschrieben hast? 1.imagesavealpha 2.imagealphablending? Gemäss PHP Dokumentation, würde die umgekehrte Reihenfolge eher Sinn machen.

      Oh, riesen Dank!
      Über die Reihenfolge hab ich nichts gefunden.
      Wenn ich die Funktionen jetzt so schreibe:

      imagesavealpha($img, true);  
      imagealphablending($img, true);
      

      und dann den Text darüber lege stimmt beinahe alles.
      Nur der Hintergrund ist nicht mehr transparent sondern behält seine zugewiesene Farbe.

      Das sieht so aus:

      // Hintergrundfarbe  
      $background_color = imagecolorallocate($img, 200, 200, 200);	  
      // Hintergrundfarbe setzen und transparent machen	  
      imagefill($img, 0, 0, $background_color);  
      imagecolortransparent($img, $background_color);
      

      Ich habe jetzt versucht diesen Abschnitt vor oder nach den alpha-blending zu schreiben aber der Hintergrund wird nicht transparent :(

      Hast du da noch eine Idee?

      Grüße, Matze