Zeichen in eine Bilddatei schreiben - wie am elegantesten?

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

  • Zeichen in eine Bilddatei schreiben - wie am elegantesten?

    Ich habe ein Bild mit einem Schachbrett (also 8 x 8 Felder) als jpg-Bild
    Die Felder sollen durchnummeriert sein:
    Erste Reihe: 1-8
    Zweite Reihe: 9-16
    ...
    Achte Reihe: 56-64
    Nun möchte ich mir für jede Position in der jpg x&y in Pixel in ein Array definieren in der Art:

    PHP-Code:
    $pos[1] = array (
    'x' => 25,
    'y' => 75
    );
    $pos[2] = array (
    'x' => 39,
    'y' => 75
    );
    $pos[3] = array (
    'x' => 53,
    'y' => 75
    );​ 
    definieren.

    Der Abstand von x-Pos zu nächsten x-Pos ist 14 Pixel
    Der Abstand von Zeile zu Zeile (also y) ist 16 Pixel
    Ich brauche also 64 $Variablen ($pos[1] bis $pos[64])
    worin die Koordinaten drin gespeichert sind.

    Frage an die Profis hier: geht das auch kürzer / eleganter zu schreiben als meine Variante, 64 mal das Array zu definieren?

    Ich möchte dann in meinem Script 5 Werte die zufällig erzeugt werden
    oder in einem Formular ($_post) eingegeben werden (z.B. 4, 12, 50, 23)
    die Werte in die jpg an die entsprechende Postion schreiben mittels:

    Beispiel für Feld 4:
    PHP-Code:
    $posx $pos[4]['x'];
    $posy $pos[4]['y'];
    imagettftext($jpg90$posx$posy$white$font$zahl); 
    da ja Abstand x und y mit 14, 16 Pixel konstant ist, kann man das irgendwie kürzer, eleganter schreiben?




  • #2
    Das kann man doch einfach zur Laufzeit berechnen, das ist jetzt nicht getestet, aber so könnte es gehen:
    PHP-Code:
    <?php
       $feld 
    44;

       
    $spalte = (44 8);

       if (
    $feld <= 8)
         
    $reihe 0;
       else if (
    $feld <= 16)
         
    $reihe 1;
       else if (
    $feld <= 24)
         
    $reihe 2;
       else if (
    $feld <= 32)
         
    $reihe 3;
       else if (
    $feld <= 40)
         
    $reihe 4;  
       else if (
    $feld <= 48)
         
    $reihe 5;    
       else if (
    $feld <= 56)
         
    $reihe 6;
       else
         
    $reihe 7;    
    ?>
    Damit hast du Spalte und Reihe, jetzt noch mit Breite und Höhe der Felder multiplizieren plus jeweils einen Offset und fertig.

    Kommentar


    • #3
      ich probiere das mal aus, aber was meinst Du mit jeweils einem Offset? Ich brauche zum Schluss immer die genaue Position in Pixel x & y , damit ich an diese Stelle dann die gewünschten Zeichen in die JPG schreiben kann

      Kommentar


      • #4
        Du willst doch vermutlich den Text nicht komplett am Rand stehen haben, sondern mit etwas Abstand, das meine ich mit Offset

        Kommentar


        • #5
          okay, ja das ist logisch :-) Danke für Deine Tip's. es hat wunderbar funktioniert.

          Ich hab noch ne Frage/Bitte.

          Möchte ja die Werte über ein Formular eingeben, also 10 Eingabe Zahlen im Bereich von 1-64 eben.

          Kann man das INPUT mit $_POST irgendwie so in der Art Array speichern, damit dann z.B. $_POST['eingabe'][1], $_POST['eingabe'][2], .. usw. die 10 Zahlen drin sind?

          geht das Formular irgendwie mit einer For-Schleife aufzubauen ?

          Kommentar


          • #6
            Wenn du im HTML-Code schreibst
            HTML-Code:
            <input type='text' name='zahlen[]'>
            <input type='text' name='zahlen[]'>
            <input type='text' name='zahlen[]'>
            <input type='text' name='zahlen[]'>
            <input type='text' name='zahlen[]'>
            <input type='text' name='zahlen[]'>
            <input type='text' name='zahlen[]'>
            <input type='text' name='zahlen[]'>
            <input type='text' name='zahlen[]'>
            <input type='text' name='zahlen[]'>
            Dann bekommst du in PHP das Array $_POST['zahlen'] in dem dann deine 10 Zahlen stehen

            Kommentar


            • #7
              supi, vielen Dank
              Zuletzt geändert von BH8; 31.03.2023, 17:58.

              Kommentar


              • #8
                Hast du nur ein Select-Objekt in deinem Formular?

                Wenn du wissen willst, was im $_POST-Array genau drin steht, helfen diese 3 Zeilen:
                PHP-Code:
                echo '<pre>';
                var_dump($_POST);
                echo 
                '</pre>'

                Kommentar


                • #9
                  nein, mehrere (10) - es funktioniert jetzt alles wunderbar - vielen Dank

                  Kommentar


                  • #10
                    Hab doch noch ne Frage:
                    Ich gebe mir das Resultat des jpg-Bildes mit
                    PHP-Code:
                    imagejpeg($jpg,); 
                    aus.

                    Wie kann ich da die Position des Bildes im Browser festlegen?
                    Und wie kann ich es verkleinert anzeigen, dass der Besucher es erst groß zoomen muss?
                    Zuletzt geändert von BH8; 02.04.2023, 10:44.

                    Kommentar


                    • #11
                      Ganz einfach mit dem img-Tag und CSS:

                      HTML-Code:
                      <img class="myImage" src="createImage.php" alt="">
                      Allerdings musst du dann die Variablen aus dem Formular in einer Session zwischenspeichern und in dem Script per Session wieder auslesen.

                      Kommentar


                      • #12
                        verstehe es leider nicht ...
                        in meinem Script gibt die Zeile
                        [COLOR=#000000][COLOR=#0000BB]imagejpeg[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]$jpg[/COLOR][COLOR=#007700],);[/COLOR][/COLOR]​
                        das Bild, welches ich mit den Zeichen "bestückt" habe, an den Browser aus.

                        wie muss ich das in Deinen Vorschlag einbinden?

                        Hier mal mein gesamtes Script. Da möchte ich dass das jpg-Bild am Besten erst ganz klein dargestellt wird, damit der Betrachter es erst groß zoomen muss, oder es soll verschoben dargestellt werden, damit er die Stelle im Bild noch nicht sieht, wo das Zeichen ins jpg gesetzt wurde

                        PHP-Code:
                        <?php
                        header
                        ('Content-type: image/jpeg');
                        $zahl $_GET['nummer'];
                        $jpg imagecreatefromjpeg('karte.jpg');
                        $farbe imagecolorallocate($jpg0020);
                        $font 'verdana.ttf';
                        imagettftext($jpg910300346$farbe$font$zahl);
                        imagejpeg($jpg);
                        imagedestroy($jpg);
                        ?>
                        Zuletzt geändert von BH8; 02.04.2023, 11:04.

                        Kommentar


                        • #13
                          Beispiel:
                          PHP-Code:
                          <?php
                             session_start
                          ();

                             
                          $showImage false;

                             if (isset(
                          $_POST['txt']))
                             {
                                
                          $_SESSION['txt'] = $_POST['txt'];

                                
                          $showImage true;

                             }
                          ?>
                          <!DOCTYPE html>
                          <html lang="de">
                            <head>
                              <meta charset="utf-8">
                              <meta name="viewport" content="width=device-width, initial-scale=1.0">
                              <title>Titel</title>
                            </head>
                            <body>
                              <form action="" method="post">
                                <input type="text" name="txt">
                                <input type="submit" name="submit" value="Anzeigen">
                              </form>

                          <?php
                             
                          if ($showImage)
                               echo 
                          "<img src='img.php' alt=''>";
                          ?>
                            </body>
                          </html>​
                          PHP-Code:
                          <?php
                              session_start
                          ();    
                              
                          header("content-type: image/png");
                              
                          $fontfile "fonts/francen.ttf";
                              
                          $texthoehe 20;

                              
                          // neues Bild mit Breite und Höhe erzeugen
                              
                          $img imagecreatefromjpeg("./images/bild1.jpg");

                              
                          // Farbwerte festlegen
                              
                          $red ImageColorAllocate($img25500);

                              
                          // Text
                              
                          ImageTTFText($img$texthoehe0528$red$fontfile$_SESSION['txt']);
                              
                          //Linie
                              
                          Imagepng($img);
                              
                          ImageDestroy($img);
                          ?>

                          Kommentar


                          • #14
                            Dankeschön, aber
                            ich weiß nicht, ob wir uns falsch verstehen. Habe es vielleicht falsch beschrieben, SORRY

                            Mein Script nimmt die übergebene "Nummer" (get) (ist eine 3-stellige Zahl) und setzt diese Zahl in die jpg-datei karte.jpg

                            Das funzt ja auch alles wunderbar

                            Ich möchte aber, dass das gesamte Bild karte.jpg im Browser verkleinert angezeigt wird, oder verschoben, damit der Betrachter, der diese Seite öffnet noch nicht die Stelle sieht, wo die Zahl steht.
                            Hier mal der Link zu der karte.jpg, was ich meine: https://zauberfreak.de/karte.jpg

                            Hoffe, ich habe es jetzt richtig formuliert.

                            Kommentar


                            • #15
                              Das kannst du doch per CSS beim img-Tag steuern

                              Kommentar

                              Lädt...
                              X