[GD] transparente schrift (über schatten)

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

  • [GD] transparente schrift (über schatten)

    hey,

    also folgendes problem, ich hab eine klasse die bilder darstellt, sie watermarken, resizen usw kann, die galerie kasse greift darauf zu und stellt die bilder dar.

    als möglichkeiten zum watermark'n gibts einmal überblendung mit einem bild (jpg, gif, png) inkl transparenz einer bestimmten fabe setzen um kein eckiges feld, sondern z.b. einen schriftzug oder ähnliches einzublenden, funktioniert alles wunderbar.

    außerdem besteht die möglichkeit, eine ttf datei anzugeben und einen string, der eingeblendet werden soll, on-the-fly, jedesmal aufs neue.
    solange der string nicht selbst transparent ist, geht ales gut, schatten (voll und transparent) werden gezeichnet, auch eine art kontur ist möglich, möchte ich aber den string selbst auch halbtransparent, scheint der schatten bzw die kontur durch.

    gibt es eine möglichkeit, das von einander zu subtrahieren?
    mir kam schon die idee, das in ein weiteres bild zu kopieren und zuerst den schatten in einer bestimmten farbe zeichnen zu lassen, dann den text darüber und danach schwarz und die textfarbe auf transparent zu setzen, das entstandene bild dann mit dem eigentlichen bild zusammenzufügen, aber das scheint mir doch etwas sehr viel aufwand für das watermarken eines einzelnen bildes...

    kann man die schrift nicht auf dem eigentlichen bild später nocheinem transparent überzeichnen lassen?

    außerdem wäre es möglich, die ttfbox vorher schonmal auszuschneiden, zwischenzuspeichern und zum schluß die form der schrift zu überblenden, aber da es dann um pixelarbeit geht, denke ich mir mal, dass es auch reichlich auf die power geht, fällt also von daher flach...

    any ideas ?
    lg psykadeliK

    ---- schnapp ----

  • #2
    von der logik her, macht es ein grafikprogramm (zB ps) auch nicht anders: auch ein transparentes objekt wirft rein rechnerisch einen vollen schatten.

    wenn du das umgehen willst, ist eine umfangreiche operation unvermeidlich. du könntest versuchen, alphakanäle zu erzeugen und die als stanze zu verwenden, um über kopieren eine art layertechnik wie im photoshop nachzuempfinden. allerdings scheint mir imagemagick an der stelle angebrachter und performanter als die gd-funktionen.
    Kissolino.com

    Kommentar


    • #3
      jo ähnliches hatte ich befürchtet ... :/

      also von meinem vorstellungsvermögen her, wäre es das 'einfachste' die ursprüngliche schrift in ein neues bild zu schreiben, was eben genau die ausmaße der box hat, dann in einem array oder ähnlichem die einzelnen pixel zu speichern und den schatten von hand darum zu malen, also mit entsprechender fabe.

      würde bei mir warscheinlich so aussehen, dass ich eine art bitmap erstellen würde, bzw (abhängig von performance-tests) das bild in eine wbmp datei oder so umwandeln würde und dann den schatten von hand "zeichen" würde. de facto würde ich eine große schleife haben, die pixel für pixel durchgeht und prüft, ob der aktuelle pixel im schriftfeld, oder außerhalb des schriftfeldes liegt und demnach, wenn er außerhalb liegt und $this->watermark_shadow_offset pixel vom den "schrift-pixel" entfernt liegt (wenn in einem leeren bild die schrift weiß und der rest schwarz ist, halt auf farbe prüfen) die den pixel einzeln mit der entsprechenden farbe füllen.

      bei der kontur wäre es ähnlich, was den vortei hätte, dass es auch eine entsprechend größere kontur zulassen würde, als es die 0815 methode zulässt, die jeweil nur einmal um offset links, rechts, oben und unten versetzt zeichnet. (bild müsste dementsprechend auch dann größer erzeugt werden (width = boxwidth + shadowoffset + 2 * konturoffset... etc)

      alles rein theoretisch kein großes problem, doch ist mir schon bei der umstellung auf klassen aufgefallen, dass es nun etwas langsamer geworden ist, im gegensatz zu der libary version, genaueres werde ich noch testen und optimieren.
      da aber die bilder in der galerie in ihrer größe nur einmal wirklich geändert werden und nicht jedesmal on-the-fy erzeugt werden, mach ich mir da weniger gedanken drum, einzig das watermarken soll on-the-fly passieren, damit die bilder auch auf mehreren seiten verwendet werden können, ohne jedesmal alles neu abzuspeichern...

      imagemagik kam mir auch in den sinn, habe ich dann aber bald aufgrund der fehlenden kompatiblität verworfen, was ist, wenn es später mal auf einem windowsserver läuft? gd2 ist verfügbar, imagemagik soweit ich weiß nicht.
      die einzelnen methoden kann ich später ja nochmal overloaden, sollte es auf einem anderen server laufen, aber die grundfunktionalität soll auf allen systemen gegeben sein, hauptsache xml und gd2 ist installiert.

      grüße psy
      lg psykadeliK

      ---- schnapp ----

      Kommentar


      • #4
        sorry ich glaub ich hab mic doof ausgedrückt, zeichnen würde ich dann natürlich im orginal welches dann ausgegeben wird (ohne abzuspeichern, on-the-fly halt ).
        Zuletzt geändert von psykadelik; 25.10.2004, 01:40.
        lg psykadeliK

        ---- schnapp ----

        Kommentar

        Lädt...
        X