Fehler mit imagefttext

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

  • Fehler mit imagefttext

    Hi,

    ich hab ein Script das ich mir vor Jahren mal zusammengebastelt habe um Bilder mit Text zu versehen wieder rausrgekramt und wollte was anderes daraus machen, nun hab die ganzen Funktionen etc. die ich nicht mehr benötige ausgebaut und alles läuft noch 1a mit diesem Code, wenn ich dann aber mit imagefttext einen Text einfügen will wird mir das Bild nicht mehr angezeigt. Der imagefttext-Teil des Codes ist der Originale aus dem OriginalScript, sollte also eigentlich keine Probleme machen, tut er aber!

    Hier der Code mit dem ich arbeite (der Fehler liegt sicher am imagefttext da es funktioniert wenn der imagefttext-teil weg ist)

    PHP-Code:
    header ("Content-type: image/png");
    $ges $_GET["ges"];
    $pic $_GET["pic"];
    $text1 $_GET["text1"];
    $text2 $_GET["text2"];
    $gros "12";
    $gros2 "10";
    $font_file "southpark.ttf";
    $vorl "$ges/$pic.png";
    $Bild ImageCreateFromPNG($vorl);
    $black imagecolorallocate($Bild0x000x000x00);
    imagefttext($Bild$gros014125$black$font_file$text1);
    imagefttext($Bild$gros2044125$black$font_file$text2);
    ImagePNG ($Bild); 
    Wo liegt da der Fehler?

  • #2
    Keiner eine Idee?

    Kommentar


    • #3
      imagettftext benötigt sowohl die gdlib als auch freetype. Sind beide Erweiterungen bei dir vorhanden? Ansonsten solltest du ggf. nur die Funktionen der gdlib benutzen.

      Peter
      Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
      Meine Seite

      Kommentar


      • #4
        Ist beides vorhanden, ich nutze wie gesagt den selben Code mit ein paar DB-Abfragen zusammen in 2 Scripten auf dem selben Server und da funktioniert es ohne probleme, nur hier funktioniert es auf einmal nicht mehr.

        Kommentar


        • #5
          Zitat von DjDope Beitrag anzeigen
          Hi,

          ich hab ein Script das ich mir vor Jahren mal zusammengebastelt habe um Bilder mit Text zu versehen wieder rausrgekramt und wollte was anderes daraus machen, nun hab die ganzen Funktionen etc. die ich nicht mehr benötige ausgebaut und alles läuft noch 1a mit diesem Code, wenn ich dann aber mit imagefttext einen Text einfügen will wird mir das Bild nicht mehr angezeigt. Der imagefttext-Teil des Codes ist der Originale aus dem OriginalScript, sollte also eigentlich keine Probleme machen, tut er aber!

          Hier der Code mit dem ich arbeite (der Fehler liegt sicher am imagefttext da es funktioniert wenn der imagefttext-teil weg ist)
          Du weißt zwar nicht genau, was dein Quelltext macht, bist dir aber sicher, dass der Fehler an imagefttext liegt?

          Dreh error_reporting() auf die höchste Stufe, schalte das Error-Logging ein. Außerdem liefern viele Funktionen einen Rückgabewert. Den kann man sich anzeigen lassen. Schließlich kann imagePNG() die Binärdaten der Grafik auch in eine Datei speichern, anstatt sie direkt in den Ausgabekanal zu schieben. Mach das mal und entferne die header()-Ausgaben, dann siehst du vielleicht auch eine Fehlermeldung.

          Auch würde ich mal nachsehen, ob die Font-Datei "southpark.ttf" überhaupt im aktuell erreichbaren Pfad liegt. Bei TTF müsste übrigens auch imagettftext() funktionieren. Imagefttext() benötigt (laut Handbuch) ein mit Freetype2 compiliertes PHP. Ob das bei dir der Fall ist, sagt dir phpinfo() (mit Versionsinformation) oder gd_info() (ohne Versionsinformation).
          Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

          Kommentar


          • #6
            Das ist es ja, alles ist soweit korrekt und das Bild wird auch generiert und angezeigt wenn ich das imageftttext weglasse. Und imagettftext kann ich nicht verwenden da ich die Größe einstellen will etc. das geht ja nur bei imagefttext. Und Freetype etc. ist alles vorhanden, das selbe Script mit DB-Abfragen etc. funktioniert tadellos auf dem selbem Server.


            PHP-Code:
            # Typ festlegen, vorher exestieren KEINE Zeichen!
            header ("Content-type: image/png"); 

            # $ges wird per GET übergeben und hat den Wert 1
            $ges $_GET["ges"];

            # $pic wird per GET übergeben und hat den Wert 10
            $pic $_GET["pic"]; 

            # $text1 wird Urlencoded per GET übergeben und hat den Wert "TESTTEXT" (Ohne ")
            $text1 $_GET["text1"]; 

            # $text2 wird Urlencoded per GET übergeben und hat den Wert "Hallo Welt" (Ohne ")
            $text2 $_GET["text2"]; 

            # Festlegen der ersten Schriftgöße
            $gros "12"

            # Festlegen der zweiten Schriftgröße
            $gros2 "10"

            # Font-File festlegen, liegt im selben Verzeichniss wie alle anderen Dateien
            $font_file "southpark.ttf"

            # Bildnamen und Pfad erstellen (1/10.png)
            $vorl "$ges/$pic.png"

            # Bildvorlage einlesen
            $Bild ImageCreateFromPNG($vorl); 

            # Schriftfarbe 1 festlegen
            $black imagecolorallocate($Bild0x000x000x00);

            # ersten Text einfügen
            imagefttext($Bild$gros014125$black$font_file$text1); 

            # zweiten Text einfügen
            imagefttext($Bild$gros2044125$black$font_file$text2); 

            # Bild ausgeben
            ImagePNG ($Bild); 

            Kommentar


            • #7
              Hallo,

              Zitat von DjDope Beitrag anzeigen
              Und imagettftext kann ich nicht verwenden da ich die Größe einstellen will etc. das geht ja nur bei imagefttext
              natürlich kannst du auch bei imagettftext die Schriftgröße angeben. Davon angesehen hat dir fireweasel bereits die häufigsten Fehlerquellen aufgelistet und dich auf das Error-Reporting verwiesen. Vielleicht solltest du seine Hinweise mal der Reihe nach abarbeiten und dir vor allem die Unterschiede zwischen diesem und dem funktionierenden Script herausarbeiten. Wenn die so gleich wären, wie du sagst,müsste es ja funktionieren. Also liegt der Fehler offenbar doch in den kleinen Unterschieden und das kann sogar mal „nur“ ein unterschiedlicher Pfad sein.

              Gruß,

              Amica
              [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
              Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
              Super, danke!
              [/COLOR]

              Kommentar


              • #8
                Des Rätsels Lösung: Der Fontname darf wohl nur 8+3 Zeichen lang sein, war aber 9+3, jetzt einfach das Park weg gelassen und es geht

                allen für die Hilfe

                Kommentar


                • #9
                  Zitat von DjDope Beitrag anzeigen
                  Des Rätsels Lösung: Der Fontname darf wohl nur 8+3 Zeichen lang sein, war aber 9+3, jetzt einfach das Park weg gelassen und es geht

                  allen für die Hilfe
                  Darauf wär ich nie gekommen. Wenn es wirklich daran lag, solltest du einen Bug Report posten.
                  [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                  Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                  Super, danke!
                  [/COLOR]

                  Kommentar


                  • #10
                    Zitat von AmicaNoctis Beitrag anzeigen
                    Darauf wär ich nie gekommen. Wenn es wirklich daran lag, solltest du einen Bug Report posten.
                    Bin ich auch nur durch zufall, dachte an die gute alte Dos-Zeit, da gingen doch auch nur 8+3

                    Bug Report posten? Wie/Wo soll ich sowas machen?

                    Kommentar


                    • #11
                      Zitat von DjDope Beitrag anzeigen
                      Bug Report posten? Wie/Wo soll ich sowas machen?
                      http://bugs.php.net/
                      [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                      Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                      Super, danke!
                      [/COLOR]

                      Kommentar


                      • #12
                        Ich wollte ursprünglich schreiben, dass du zuerst einmal die Ursache dieses merkwürdigen Verhaltens recherchierst, bevor du einen Bugreport absetzt.

                        Zu spät.

                        Der Bug-Report wäre übrigens hier passender gewesen:
                        https://bitbucket.org/pierrejoye/gd-libgd/issues

                        Zitat von DjDope Beitrag anzeigen
                        Des Rätsels Lösung: Der Fontname darf wohl nur 8+3 Zeichen lang sein, war aber 9+3, jetzt einfach das Park weg gelassen und es geht
                        So wie es aussieht, kann der Parameter $fontname mehrdeutig interpretiert werden[0]. Man kann damit mehrere Pfade angeben, an denen nach der Font-Datei gesucht wird. Bei älteren LibGD-Versionen war wohl als Separator für die verschiedenen Pfade ein Leerzeichen (m() vorgesehen. Das gab selbstverständlich Probleme, wenn Pfade selbst Leerzeichen enthielten. Der Fehler wurde dadurch "behoben", dass jetzt ein Semikolon die Pfade trennt.

                        Zitat, PHP-Handbuch, Funktion imagefttext(), Parameter $fontfile:

                        (...)
                        When using versions of the GD library lower than 2.0.18, a space character, rather than a semicolon, was used as the 'path separator' for different font files. Unintentional use of this feature will result in the warning message: Warning: Could not find/open font. For these affected versions, the only solution is moving the font to a path which does not contain spaces.

                        In many cases where a font resides in the same directory as the script using it the following trick will alleviate any include problems.

                        (...)
                        Die Funktion imagettftext() ist (oder war) übrigens gleichermaßen betroffen.

                        Als ein Workaround wurde für Windows-Betriebssysteme auch der Short-Name-Trick empfohlen.

                        Die betroffene LibGD-Version 2.0.18 hat allerdings schon ein paar Jährchen auf dem Buckel. Aktuell dürfte 2.0.34 (oder neuer) sein. Leider konnte ich auf die Schnelle keine Übersicht finden, welche PHP-Version mit welcher GD-Version gebundelt wurde. Aber selbst wenn das die Ursache für dein Problem wäre, müsste dein PHP schon ziemlich betagt sein.

                        (...)

                        Depending on which version of the GD library PHP is using, when fontfile does not begin with a leading / then .ttf will be appended to the filename and the library will attempt to search for that filename along a library-defined font path.

                        (...)
                        Dieser Abschnitt lässt noch eine weitere Interpretation zu: Der Parameter $fontfile "vermurkst" lokale Pfadangaben (so wie deine). Unklar ist nur, wie eine Verkürzung des lokalen Pfades um ein Zeichen dann plötzlich gefunden werden sollte. Unter Windows könnte man per ProcessMonitor die Pfadaufrufe mitloggen um nachzuvollziehen, wie die Zeichenkette umgewandelt wird.

                        Auch müsste das Ersetzen des relativen Pfades durch einen absoluten den Fehler beseitigen. Probeweise so:
                        PHP-Code:
                        imagefttext(..., realpath($fontfile), ...); 
                        --
                        [0] Genaueres lässt sich erst nach einem Blick in die (Freetype-?)Quellcodes sagen. Mal schauen ...

                        Der zweite Zitat-Abschnitt scheint Unsinn zu erzählen. Die Existenz eines Font-Files wird geprüft, indem an jeden angegebenen Pfad erst ein Leerstring, dann ".ttf", ".pfa", ".pfb" und schließlich ".dfont" angehängt wird.

                        https://bitbucket.org/pierrejoye/gd-.../gdft.c#cl-430

                        Begrenzungen der Namenslänge auf 8.3 Zeichen habe ich (bisher) keine entdecken können ...
                        Zuletzt geändert von fireweasel; 05.03.2012, 14:15. Grund: ProcessMonitor nicht ...Explorer m(
                        Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

                        Kommentar

                        Lädt...
                        X