Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] GDLib Text nur in bestimmtem Foto

Einklappen

Neue Werbung 2019

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

  • [Erledigt] GDLib Text nur in bestimmtem Foto

    Ich arbeite mit Dreamweaver cs3 und habe ein script geschrieben für die Erzeugung einer Teilnahmeurkunde für einen Amateurfunkwettbewerb. In diesem script werden aus einer mysql-Datenbank über die ausgewählte id Daten ausgelesen und als Text in eine leere Urkunde eingetragen. Das hat mit einer leeren Urkunde in 2014 (Dateiname mrd2014.jpg) auch prima funktioniert.
    Nun habe ich in 2015 eine neue Teilnahmeurkunde erstellt – Dateiname mrd2015.jpg. In diese Datei wird kein Text mehr eingetragen. Die Urkunde bleibt leer.
    Das script ist absolut unverändert, es werden lediglich entsprechend der gewählten id andere Daten ausgelesen.
    Ich habe nun folgendes probiert
    - Datei mrd2014.jpg umbenannt in mrd2015.jpg >>> Text wird eingetragen
    - Neu Datei mrd2015.jpg umbenannt in mrd2014.jpg – kein Text eingetragen.
    - Dateien der Leer-Urkunden aus Vorjahren nacheinander aufgerufen, in keine der Dateien wird ein Text eingetragen – nur in die Datei aus 2014.
    - Ich habe den script-Inhalt in eine neue php-Datei kopiert – kein Erfolg
    - Ich habe die jpg-Dateien in einem Texteditor geöffnet, um eventuelle Unterschiede im header zu erkennen - kein Erfolg
    - Ich habe gegoogelt , um eventuell einen Hinweis auf Besonderheiten der jpg-Dateien zu erhalten – kein Erfolg

    Jetzt sind mir die Ideen ausgegangen. Gibt es irgendwo einen Hinweis, dass sich ein Foto derart unsichtbar in ein script eintragen kann, dass alle anderen Fotos einfach ignoriert werden ?
    Entschuldigt die Ausführlichkeit, aber ich konnte das Problem nicht kürzer beschreiben.
    Gruss
    seefunker


  • #2
    Hallo,

    schon mal versucht das Script zu debuggen?

    PHP: http://php-de.github.io/jumpto/leitfaden/
    SQL: http://php-de.github.io/jumpto/sql/

    Ev. kannst du es hier ja posten? (Je nach Umfang und Lizenz)?
    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

    Kommentar


    • #3
      Ich habe mal die 'display errors' auf 1 gesetzt. Da kommen zwei Notices zu undefinierte offsets. Der Text aus der Datenbank wird auf Länge geprüft, bei mehr als 50 Zeichen wird er mit explode und wordwrap geteilt und auf 3 Zeilen verteilt. Die notices weisen also darauf hin, dass kein Text vorhanden ist, der eventuell geteilt werden könnte. Aber warum ?
      Das für mich unerklärliche ist doch, dass in einer (einer einzigen !)Datei alles problemlos funktioniert und in keiner anderen Bild-Datei.
      seefunker

      Kommentar


      • #4
        Ich poste mal das script, da Marke Eigenbau auch keine Linzenzprobleme. Haut mich nicht, wenns etwas länger ist.
        PHP-Code:
        <?php
        error_reporting
        (E_ALL);
        ini_set('display_errors'1); 
        //Verbindung zur Datenbank und ermitteln der Bild-Daten
        include ("mrd_admin/connect.inc.php");
            
        $year=date("Y");
        //    $sqlab = "select * from mrd2014 where id =" . (int)$_GET['id'] . " ";
            
        $sqlab "select * from mrd2014 where id =113";
            
        $res mysqli_query($db$sqlab);
            
        $num mysqli_num_rows($res);
           if (
        $num==0) echo "keine passenden Datensätze gefunden";
           while (
        $dsatz mysqli_fetch_assoc($res))
           {
            
        $callsign $dsatz['callsign'];
            
        $station $dsatz['station'];
            if (
        $dsatz['crewof'] != NULL){
            
        $crewof "crew of:  " $dsatz['callsign'];
            }
            
        $TXT $dsatz["op"];
        //Zeilenbreite festlegen 
        $ANZ 50// max. Zeichen pro Zeile 
         
        if ($ANZ 100 || $ANZ 5) { $ANZ 50; } 
         
        // den Text nach Zeilenumbruch aufteilen und in Array schreiben 
        $csop1 explode('|'wordwrap($TXT50'|'));
        $op_array = array(); 
        foreach(
        $csop1 as $temp) { 
         if ( 
        strlen($temp) > $ANZ) { 
          
        $temp_2 explode('|' wordwrap$temp$ANZ'|'1) ); 
          foreach(
        $temp_2 as $sp) { $op_array[] = trim($sp); } 
         } else { 
          
        $op_array[] = trim($temp); 
         } 

        echo 
        "<br>";
        $op1 $csop1[0];
        $op11 $csop1[1];
        $op111 $csop1[2];
        //Ab hier die Erzeugung des Awardfotos
            
        $mrd_origimg $dsatz['year']."/mrd"$dsatz['year'].".jpg";
            
        $mrd_img $dsatz['year']."/".$dsatz['callsign'].".jpg";
            }
            
        //Originalfoto des MRD-Jahrgangs in Variable schreiben
            
        $insert imagecreatefromjpeg($mrd_origimg);
            
        //Schriftgröße für die Textzeilen festlegen
            
        $font="arial.ttf";
            
        $font_size1 34;
            
        $font_size2 44;
             
            
        //Auswahl der Textfarbe
            
        $color=ImageColorAllocate ($insert135270);
             
            
        //Kontrolle der Breite der Textzeilen
            
        $bbox1=imagettfbbox ($font_size10$font$op1);
            
        $xcorr1=0-$bbox1[6];
            
        $mase1=$bbox1[2]+$xcorr1;
            
        $bbox11=imagettfbbox ($font_size10$font$op11);
            
        $xcorr11=0-$bbox11[6];
            
        $mase11=$bbox11[2]+$xcorr11;
            
        $bbox111=imagettfbbox ($font_size10$font$op111);
            
        $xcorr111=0-$bbox111[6];
            
        $mase111=$bbox111[2]+$xcorr111;
            
        $bbox2=imagettfbbox ($font_size10$font$callsign);
            
        $xcorr2=0-$bbox2[6];
            
        $mase2=$bbox2[2]+$xcorr2+30;
            
        $bbox3=imagettfbbox ($font_size20$font$station);
            
        $xcorr3=0-$bbox3[6];
            
        $mase3=$bbox3[2]+$xcorr3;
             
            
        //Kontrolle der Bildbreite
            
        $width=imagesx($insert);
             
            
        //cBerechnung der X-Position für die Textzeilen
            
        $x1=($width-$mase1)/2;
            
        $x11=($width-$mase11)/2;
            
        $x111=($width-$mase111)/2;
            
        $x2=($width-$mase2)/2;
            
        $x3=($width-$mase3)/2;
            
        //Bestimmung der Höhe der Textzeilen     
            
        $height1 imagefontheight($font_size1);
            
        $height2 imagefontheight($font_size2);
            
        $text_height1 = ($height1/2) + (10);
            
        $text_height2 = ($height2/2) + (10);
            
        //Bestimmung der Y-Position der Textzeilen
            
        $y1 = (1395) + ($text_height1);
            
        $y11 = (1440) + ($text_height1);
            
        $y111 = (1480) + ($text_height1);
            
        $y2 = (1540) + ($text_height1);
            
        $y3 = (1610) + ($text_height2);
            
        //Schreibe die Textzeilen
            
        imagettftext ($insert$font_size10$x1$y1$color$font$op1);
            
        imagettftext ($insert$font_size10$x11$y11$color$font$op11);
            
        imagettftext ($insert$font_size10$x111$y111$color$font$op111);
            
        imagettftext ($insert$font_size20$x2$y2$color$font$callsign);
            
        imagettftext ($insert$font_size20$x3$y3$color$font$station);
            
        //Ausgabe des Bildes
            
        imagejpeg($insert$mrd_img,70); 
            echo 
        "<img src=\"$mrd_img\" width=\"600\" height=\"800\" align?\"center\"/>"
        ?>

        Kommentar


        • #5
          Auf den ersten Blick ev:

          PHP-Code:
          sqlab "select * from mrd2014 where id =113";
          // ...
          $mrd_origimg $dsatz['year']."/mrd"$dsatz['year'].".jpg"
          werden ev. keine Datensätze gefunden? -> "mrd2014"
          Bzw. die Suche nach Jahr im Pfad und Dateiname etc..

          Das riecht übrigens alles nach falschem/schlechtem(r) Tabellendesign / Logik.

          Ansonsten noch.. Das Script ist etwas "überarbeitungswürdig" freundlich gesagt:

          -> das: "Datensätze" deutet auf ein Zeichensatzproblem/unstimmigkeit hin

          -> die mysql_ Erweiterung wird bald nicht mehr funktionieren, weil die aus PHP rausfällt, weil veraltet: http://php-de.github.io/jumpto/faq/#deprecated-mysql (ganz unten)

          -> Total die unübersichliche Code-Wurst ist das, kaum/schlecht eingerückt etc...

          LG
          Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
          PHP.de Wissenssammlung | Kein Support per PN

          Kommentar


          • #6
            Noch eine Ergänzung,
            ich habe mir mal mit echo die Ergebnisse von $op1, $op11 und $op111 (Zeilen 35 - 37 im o.g. script) ausgeben lassen. Der Text aus der Datenbank wird sauber geteilt und steht für das Foto zur Verfügung. Der Fehler muss also danach einsetzen. Es wird auch keinerlei Fehlermeldung oder Notices mehr ausgegeben.

            Kommentar


            • #7
              Überarbeitungswürdig nehme ich als Kritik gerne an,
              aber wo ist eine ungültige mysql-Erweiterung, die DB-Abfragen sind auf mysqli umgestellt, laufen sowohl auf meinem lokalen XAMPP mit php 5.5 als auch bei meinem Provider mit 5.5
              seefunker

              ... und das script funktioniert ja auch mit einem (leider nur mit einem) Foto.

              Kommentar


              • #8
                @mysql_ Da hab ich wohl Tomaten auf den Augen gehabt, vergisss den Punkt bitte.

                @$op1, $op11 und $op111 -> Die Vars könnten besser heißen.

                PHP-Code:
                echo "<br>";
                $op1 $csop1[0];
                $op11 $csop1[1];
                $op111 $csop1[2];
                //Ab hier die Erzeugung des Awardfotos
                    
                $mrd_origimg $dsatz['year']."/mrd"$dsatz['year'].".jpg";
                    
                $mrd_img $dsatz['year']."/".$dsatz['callsign'].".jpg";
                    } 
                // #####  <--- wozu gehört die hier?  ######
                    //Originalfoto des MRD-Jahrgangs in Variable schreiben
                    
                $insert imagecreatefromjpeg($mrd_origimg); 
                Das Bild $mrd_origimg gibt es unter dem Namen? Bzw. ev. gibt $insert false zürck? Prüf das mal ab.

                Wozu gehört die schliessende Klammer danach?
                Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                PHP.de Wissenssammlung | Kein Support per PN

                Kommentar


                • #9
                  PHP-Code:
                      $mrd_origimg $dsatz['year']."/mrd"$dsatz['year'].".jpg";
                      
                  $mrd_img $dsatz['year']."/".$dsatz['callsign'].".jpg"
                  Dort scheinst du zudem das Jahr als Verzeichnis im Pfad zu haben. Das passt nicht zu deinen Schilderungen aus #1, was du gemacht hast.

                  Kommentar


                  • #10
                    Das Bild gibt es unter dem Namen, es wird ja aus dem Verzeichnis geholt , wird angezeigt und unter dem neuen Namen (Zeile 40) abgespeichert. Aber es ist eben leer, kein Text drin.
                    Die Klammer gehört zu Zeile 26 (foreach...) ... Code-Wurst, ich gebe dir ja Recht, und werde das mal überarbeiten.

                    Und ja, das Jahr ist der Verzeichnisname, in das die neue Urkunde hochgeladen und nach Bearbeitung mit neuen Namen abgespeichert wird. Die neuen Namen holt sich das script aus der Datenbank (callsign)

                    Kommentar


                    • #11
                      Lass bitte das mal laufen, mir ist aufgefallen das du keine myslqi Fehlerausgaben drinnen hast:
                      (Und deine letzte Zeile hatte übrigens ein align? statt einem align= )

                      PHP-Code:
                      <?php

                      error_reporting
                      (E_ALL);
                      ini_set('display_errors'1); 


                      mysqli_report(MYSQLI_REPORT_ERROR);  // Report errors from mysqli function calls 

                      //Verbindung zur Datenbank und ermitteln der Bild-Daten
                      include ("mrd_admin/connect.inc.php");

                      $year date("Y");

                      // $sqlab = "select * from mrd2014 where id =" . (int)$_GET['id'] . " ";
                      $sqlab "select * from mrd2014 where id =113";
                      $res mysqli_query($db$sqlab);
                      $num mysqli_num_rows($res);
                      if (
                      $num == 0) { 
                          echo 
                      "keine passenden Datensätze gefunden";
                      }

                      while (
                      $dsatz mysqli_fetch_assoc($res)) {
                          
                      $callsign $dsatz['callsign'];
                          
                      $station $dsatz['station'];
                          if (
                      $dsatz['crewof'] != NULL){
                              
                      $crewof "crew of:  " $dsatz['callsign'];
                          }
                          
                      $TXT $dsatz["op"];
                          
                      //Zeilenbreite festlegen 
                          
                      $ANZ 50// max. Zeichen pro Zeile 
                          
                      if ($ANZ 100 || $ANZ 5) {
                              
                      $ANZ 50;
                          } 
                          
                      // den Text nach Zeilenumbruch aufteilen und in Array schreiben 
                          
                      $csop1 explode('|'wordwrap($TXT50'|'));
                          
                      $op_array = array(); 

                          foreach(
                      $csop1 as $temp) { 
                              if ( 
                      strlen($temp) > $ANZ) { 
                                  
                      $temp_2 explode('|' wordwrap$temp$ANZ'|'1) ); 

                                  foreach(
                      $temp_2 as $sp) {
                                      
                      $op_array[] = trim($sp);
                                  } 
                              } else { 
                                  
                      $op_array[] = trim($temp); 
                              } 
                          } 
                          echo 
                      "<br>";

                          
                      $op1 $csop1[0];
                          
                      $op11 $csop1[1];
                          
                      $op111 $csop1[2];

                          
                      //Ab hier die Erzeugung des Awardfotos
                          
                      $mrd_origimg $dsatz['year']."/mrd"$dsatz['year'].".jpg";
                          
                      $mrd_img $dsatz['year']."/".$dsatz['callsign'].".jpg";
                      }

                      //Originalfoto des MRD-Jahrgangs in Variable schreiben
                      $insert imagecreatefromjpeg($mrd_origimg);

                      //Schriftgröße für die Textzeilen festlegen
                      $font "arial.ttf";
                      $font_size1 34;
                      $font_size2 44;

                      //Auswahl der Textfarbe
                      $color=ImageColorAllocate ($insert135270);

                      //Kontrolle der Breite der Textzeilen
                      $bbox1 imagettfbbox ($font_size10$font$op1);
                      $xcorr1 $bbox1[6];
                      $mase1 $bbox1[2] + $xcorr1;
                      $bbox11 imagettfbbox ($font_size10$font$op11);
                      $xcorr11 $bbox11[6];
                      $mase11 $bbox11[2] + $xcorr11;
                      $bbox111 imagettfbbox ($font_size10$font$op111);
                      $xcorr111 $bbox111[6];
                      $mase111 $bbox111[2] + $xcorr111;
                      $bbox2 imagettfbbox ($font_size10$font$callsign);
                      $xcorr2 $bbox2[6];
                      $mase2 $bbox2[2] + $xcorr2 30;
                      $bbox3 imagettfbbox ($font_size20$font$station);
                      $xcorr3 $bbox3[6];
                      $mase3 $bbox3[2] + $xcorr3;

                      //Kontrolle der Bildbreite
                      $width imagesx($insert);

                      //cBerechnung der X-Position für die Textzeilen
                      $x1 = ($width-$mase1) / 2;
                      $x11 = ($width-$mase11) / 2;
                      $x111 = ($width-$mase111) / 2;
                      $x2 = ($width-$mase2) / 2;
                      $x3 = ($width-$mase3) / 2;

                      //Bestimmung der Höhe der Textzeilen     
                      $height1 imagefontheight($font_size1);
                      $height2 imagefontheight($font_size2);
                      $text_height1 = ($height1 2) + (10);
                      $text_height2 = ($height2 2) + (10);

                      //Bestimmung der Y-Position der Textzeilen
                      $y1 = (1395) + ($text_height1);
                      $y11 = (1440) + ($text_height1);
                      $y111 = (1480) + ($text_height1);
                      $y2 = (1540) + ($text_height1);
                      $y3 = (1610) + ($text_height2);

                      //Schreibe die Textzeilen
                      imagettftext ($insert$font_size10$x1$y1$color$font$op1);
                      imagettftext ($insert$font_size10$x11$y11$color$font$op11);
                      imagettftext ($insert$font_size10$x111$y111$color$font$op111);
                      imagettftext ($insert$font_size20$x2$y2$color$font$callsign);
                      imagettftext ($insert$font_size20$x3$y3$color$font$station);

                      //Ausgabe des Bildes
                      imagejpeg($insert$mrd_img70); 
                      echo 
                      '<img src="'.$mrd_img.'" width="600" height="800" align="center">';
                      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                      PHP.de Wissenssammlung | Kein Support per PN

                      Kommentar


                      • #12
                        Eine der logischeren Antworten ist bei den Symptomen vermutlich noch, dass "arial.ttf" im „Scriptverzeichnis“ nicht existiert.

                        Kommentar


                        • #13
                          Was dem im Eröffnungspost widersprechen würde...

                          Ich habe nun folgendes probiert
                          - Datei mrd2014.jpg umbenannt in mrd2015.jpg >>> Text wird eingetragen
                          Bin schon gespannt was rauskommt wenn der TE das Ganze vernünftig durch debuggt.

                          LG
                          Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                          PHP.de Wissenssammlung | Kein Support per PN

                          Kommentar


                          • #14
                            Danke für Eure Hinweise, habe das script mal durchlaufen lassen - gleiches Ergebnis.
                            Weil ja alle gewünschten Daten aus der Datenbank problemlos gelesen wurden, hatte ich keine Veranlassung, explizit einen mysqli-report aufzurufen. Der Text aus der Datenbank liegt ja auch aufbereitet vor gemäß echo $op1 ... usw. Er wird aber nicht in das Foto geschrieben.

                            Und wenn die arial.ttf nicht im Scriptverzeichnis liegen würde, hätte das script auch in das Bild mrd2014.jpg nichts hineingeschrieben. Das sind auch für mich doch elementare Fehler, die ich schon hinter mir hatte.
                            Ich werde heute Abend mal das script etwas "kastrieren", den ganzen DB-Teil rausschmeißen und Texte und Bilder-Namen direkt reinschreiben. Mal sehen, was dann passiert. Wenn der Fehler immer noch auftritt, poste ich das script noch einmal und lade die Fotos mit hoch.
                            Gruss
                            seefunker

                            Kommentar


                            • #15
                              So, ich habe meine Problem selbst lösen können...
                              Es lag also nicht an meiner Code-Wurst (das hat mich getroffen...) , nicht an der Datenbank und schon gar nicht an einer fehlenden arial.ttf.
                              Ich sage immer wieder, selbst denken ist hilfreich...
                              Die Fotos müssen offensichtlich eine bestimmte Mindestgröße und Auflösung haben. Ich hatte mehr zufällig festgestellt, dass die Datei mrd2014.jpg wesentlich größer war und eine höhere Auflösung hatte, als die andere Bild-Datei. Diese habe ich dann auf etwa die gleiche Größe und gleiche Auflösung (200 px) gebracht und siehe da es funktioniert. Was ich aber noch testen werde, wie weit ich mit der Größe und der Auflösung zurückgehen kann, bis die Einfügung der Texte aussetzt.
                              Ich bin froh, wieder etwas dazu gelernt zu haben und vielleicht hat ein andere "Newbie" ein ähnliches Problem und kann damit Hilfe finden.
                              Danke und bis irgendwann mal wieder
                              seefunker

                              Kommentar

                              Lädt...
                              X