imagefilltoborder mit alpha-color füllen

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

  • imagefilltoborder mit alpha-color füllen

    Hallo,

    ich habe in der GD ein Bild erzeugt, das eine relativ komplexe From enthält, die ich mit imagefilltoborder füllen möchte, wobei die Füllfarbe eine Alpha-Farbe sein soll. Leider wird dieser Bereich zwar gefüllt, ist aber nicht durchscheinend.

    Folgendes vereinfachte Beispiel hilft zur Rekonstruktion:
    PHP-Code:
    $im = @imagecreatetruecolor(10001000);
    imagealphablending($im,true);
      
    $f1 imagecolorallocate($im,148,0,0);
    $f2 imagecolorallocate($im,0,255,0);
    $t1 imagecolorallocatealpha($im,171,116,116,80);

    // transparente Füllung ist kein Problem
    imagefilledrectangle($im,100,100,400,400,$f1);
    imagefilledrectangle($im,250,250,600,600,$t1);
      
    // geht nicht, es erfolgt nur die Füllung, diese hat aber eine Deckung von 100%
    imagerectangle($im,50,300,300,500,$f2);
    imagefilltoborder($im60,310,$f2,$t1);
      
    header ("Content-type: image/png");
    imagepng($im);
    imagedestroy($im); 
    Bin für jeden Tipp dankbar...

    Gruß tracer

  • #2
    Hey,

    soweit ich weiß und auch eben nochmal nachgesehen hab, bezieht imagefilltoborder seine Farbe ausschließlich von einem Handle, welches mit imagecolorallocate erstellt wurde.
    Und imagecolorallocate versteht keinen Alphakanal.

    Vielleicht kannst du was an der GD direkt drehen, die Funktion duplizieren und diesmla auf imagecolorallocatealpha verweisen.
    Vielleicht hast du Glück und es funktioniert.

    Aber ansonsten habe ich leider auch keine Ahnung, wie du das Problem lösen könntest.

    Würde mich gern eines Besseren belehren lassen.


    gruß
    Piremilok

    Kommentar


    • #3
      ImageFillToBorder() hat wahrscheinlich das gleiche Problem wie ImageFill():
      imagefill can't deal with alpha colors
      Das heißt, du kannst zwar ein Argument $color mit Alpha-Transparenz angeben, aber der Transparenzwert
      wird von der Funktion einfach ignoriert.

      Mir würden da auf Anhieb 2 Lösungsansätze einfallen:

      1. Erstelle deine "komplexe" Grafik auf einer komplett transparenten Bitmap
      und fülle dann nicht das Innere sondern das "Außenherum" mit der Farbe, die
      du ursprünglich als Hintergrundfarbe der Bitmap vorgesehen hattest.

      2. Da du nicht angegeben hast, wie "komplex" deine selbsterstellte Grafik ist,
      kann man nur spekulieren: Du solltest dir mal die Funktion imageFilledPolygon()
      näher anschauen -- inklusive der Benutzerkommentare (weil die Verwendung
      von Teiltransparenzen manchmal Probleme macht)
      .
      Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

      Kommentar

      Lädt...
      X