variables Bild incl. Text mit PHP für eine Schleifenausgabe erstellen

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

  • variables Bild incl. Text mit PHP für eine Schleifenausgabe erstellen

    Hallo zusammen!

    Vielen Dank für die Möglichkeit hier nach Hilfe Fragen zu können.
    Als ziemlicher Neuling, der das ganze nur privat zum Spaß macht, stehe ich gerade an.

    Was ist mein Ziel?
    Ich habe eine Schleife in der Userdaten aus einer DB geholt und mittels while-Schleife ausgeben werden.
    So weit so gut, das funktioniert alles wie gewollt.

    nun möchte ich jedoch aus den Anfangsbuchstaben der aus der DB abgefragen User ein Bild erzeugen und als Hintergrund einfügen.
    Das funktioniert auch, so lange ich die Variablen im Ausgelagerten "include" für die Bilderzeugung definiere.
    (die Datei muss ja ausgelagert sein, da es in der Seite wo das eingebunden wird bereits einen Header - html - gibt)

    Das Bild wird mittels <IMG eingefügt.
    HTML-Code:
    <img src="include_alias.php">
    (die Schreibweise ohne include etc war auch neu für mich)

    Das funktioniert auch noch.

    Aber nun möchte ich eben die Variablen, die aus der DB und mittels while abgefragt werden, in eben jene bild.php übergeben und damit den Text variabel am Bild in jeder Zeile der Schleife erzeugen.

    Code für das erzeugen der "variablen" Bilder:

    die folgenden Variablen sollen eigenltich aus der übergeordneten Datei mit der DB-Abfrage kommen:
    [COLOR=#e67e22]$vorAnfang="A";
    $nachAnfang= "B";[/COLOR]
    [COLOR=#27ae60]$alias = $vorAnfang.$nachAnfang;​

    So funktioniert es, [/COLOR][COLOR=#c0392b]aber so nicht:[/COLOR]

    [COLOR=#f39c12]$vorAnfang= substr($ma['vor'],0,1);
    $nachAnfang= substr($ma['nach'],0,1);[/COLOR]
    [COLOR=#27ae60]$alias = $vorAnfang.$nachAnfang;​[/COLOR]


    PHP-Code:
    <?php

    $vorAnfang
    ="A";
    $nachAnfang"B";
    $alias $vorAnfang.$nachAnfang;

    // Höhe Breite
    $img_width 200;
    $img_height 200;

    $img imagecreatetruecolor($img_width$img_height);

    $white imagecolorallocate($img255255255);
    $grey imagecolorallocate($img227,227,227);
    imagesavealpha($imgtrue);
    $color imagecolorallocatealpha($img000127);

    imagefill($img00$color);
    // fonts/Lavigne.ttf - Schrift im Dateisystem
    $font dirname(__FILE__) .'/fonts/Lavigne.ttf';
    // Text auf dem Bild erzeugen
    imagettftext($img90, -45$img_width/20$img_height*3/10$grey$font$alias);
    // Typ festlegen
    header("Content-type: image/png");
    imagepng($img);
    imagedestroy($img);
    ?>

    Schleife der Seite wo das ganze ausgeben werden soll:

    PHP-Code:

    while ($ma mysqli_fetch_assoc($abfrage))
    switch (
    $i 4) {
    case1: {
    $vorAnfangsubstr($ma['vor'],0,1);
    $nachAnfangsubstr($ma['nach'],0,1);
    $alias $vorAnfang.$nachAnfang;


    echo'<div class="alias"> <img src="include_alias.php"> </div>';

    break;
    }
    case2: {
    $vorAnfangsubstr($ma['vorname'],0,1);
    $nachAnfangsubstr($ma['nachname'],0,1);
    $alias $vorAnfang.$nachAnfang;


    echo
    '<div class="alias"> <img src="include_alias.php"> </div>';

    ​break
    ;
    }

    ...
    ​ 


    Kurzfassung meines Problems:

    Ich kann die Variablen die mittels Schleife erzeugt werden, nicht in meine nachträglich includeten Datei bild.php verwenden um ein Bild zu generieren.


    ich kann mir vorstellen, dass es mit der Übergabe der Variablen in die bild.php zusammenhängt [COLOR=#e74c3c](da kein Include)[/COLOR], oder, dass ich das nicht in der Schleife machen kann oder die Variablen puffern (davon habe ich gar keine Ahnung) muss.
    natürlich gäbe es nun noch die Möglichkeit das Bild-Script dahingehen umzubauen, dass das erzeuge Bild abgespeichert wird und ich hole mir dann die erzeugte Bilddatei, aber das möchte ich aus irgend einem Grund so nicht machen, wenn es nicht sein muss

    Danke für eure Bemühungen!

    Lg
    Harald
    Zuletzt geändert von Harald65; 15.12.2022, 11:10.

  • #2
    Das Problem ist, dass die "include_alias.php" erst aufgerufen wird wenn der Browser versucht das Bild zu laden, nicht wenn der HTML-Code bei der "Haupt" PHP-Datei erzeugt wird. Das einfachste dürfte wohl in die folgende richtung gehen:

    HTML-Code:
    echo'<div class="alias"> <img src="include_alias.php?vor='.urlencode($vorAnfang​​).'&nach='.urlencode($nachAnfang​).'"> </div>';​

    Und der zugehörige PHP-Code dann:

    PHP-Code:
    <?php

    $vorAnfang
    =$_REQUEST["vor"];
    $nachAnfang=$_REQUEST["nach"];
    $alias $vorAnfang.$nachAnfang;

    // Höhe Breite​
    // usw.

    Kommentar


    • #3
      Vielen Dank für die schnelle Antort!

      Es funktioniert, zumindest teilweise.

      Wen ich im Quellcode das jeweilige Bild ansehe, dann wird es richtig angezeigt.

      Ausgegeben wird es allerdings immer noch mit dem "kein Bild vorhanden" Symbol.

      Eventuell weil alle Bilder dann den selben Namen haben? wobei namen finde ich keinen, die Quelle / Link ist der Name.

      Fragen über Fragen

      Vielen Dank!

      Lg
      Harald


      Kommentar


      • #4
        Zitat von Harald65 Beitrag anzeigen
        Es funktioniert, zumindest teilweise.
        Wen ich im Quellcode das jeweilige Bild ansehe, dann wird es richtig angezeigt.
        Ausgegeben wird es allerdings immer noch mit dem "kein Bild vorhanden" Symbol.
        Eventuell weil alle Bilder dann den selben Namen haben? wobei namen finde ich keinen, die Quelle / Link ist der Name.
        Hmm.. Schwer zu sagen. Meiner Meinung nach sollte der header "Content-type: image/png" ausreichen, damit der Browser das Bild richtig darstellen kann. Ich verstehe das richtig, wenn du die URL im Browser aufrufst (also z.B. "https://www.example.com/include_alias.php?vor=a&nach=b"), dann zeigt der Browser das Bild richtig an, aber beim "img"-Tag funktioniert es nicht?
        Siehst du in der Konsole des Browser irgendwelche Fehlermeldungen? (F12 drücken und Seite neu laden)

        Eine alternative Lösung wäre eine Funktion zu schreiben, die die Bilder generiert (wenn nicht bereits vorhanden) und nach einem bestimmten Schema auf dem Server ablegt. (z.B. "profil/ab.png") So wären die dann tatsächlich als "normales" Bild vorhanden.

        Kommentar


        • #5

          Also Chrome sagt mir, alles super!

          Firefox gibt das hier aus:
          [COLOR=#16a085]Der Bytestream war gemäß der deklarierten Zeichenkodierung fehlerhaft. Die Deklaration der Zeichenkodierung ist möglicherweise falsch.​[/COLOR]

          Um ehrlich zu sein, kann ich damit nichts anfangen, selbst nach einer kurzen Google-Suche.

          Edge sagt mir:

          [COLOR=#16a085]~53Probleme und ~53Verbesserungsmöglichkeiten [COLOR=#16a085][/COLOR][/COLOR]
          Die ich aber nicht als Problem in dieser Sache vermuten würde, aber definitiv noch abarbeiten werde.

          • [COLOR=var(--color-text-primary)]'-ms-text-size-adjust' is not supported by Chrome, Chrome Android, Edge, Firefox, Safari. Add 'text-size-adjust' to support Chrome 54+, Chrome Android 54+, Edge 79+.[/COLOR]
            [COLOR=var(--edge-light-foreground-color)]
            Fehler[/COLOR]
          • 1[COLOR=var(--color-text-primary)]'-webkit-text-size-adjust' is not supported by Chrome, Chrome Android, Edge 79+, Firefox, Safari. Add 'text-size-adjust' to support Chrome 54+, Chrome Android 54+, Edge 79+.[/COLOR]
            [COLOR=var(--edge-light-foreground-color)]
            Fehler[/COLOR]
          • 1[COLOR=var(--color-text-primary)]'hyphens' is not supported by Safari, Safari on iOS. Add '-webkit-hyphens' to support Safari 5.1+, Safari on iOS 4.2+.[/COLOR]
            [COLOR=var(--edge-light-foreground-color)]
            Fehler[/COLOR]
          • 1[COLOR=var(--color-text-primary)]The 'viewport' meta element 'content' attribute value should not contain 'maximum-scale'.[/COLOR]
            [COLOR=var(--edge-light-foreground-color)]
            Fehler[/COLOR]
          • 1[COLOR=var(--color-text-primary)]The 'viewport' meta element 'content' attribute value should not contain 'user-scalable'.[/COLOR]
            [COLOR=var(--edge-light-foreground-color)]
            Fehler[/COLOR]
          • 9[COLOR=var(--color-text-primary)]'content-type' header charset value should be 'utf-8'.[/COLOR]
            [COLOR=var(--edge-dark-foreground-color)]
            Warnung[/COLOR]
          • 7[COLOR=var(--color-text-primary)]'content-type' header media type value should be 'text/html', not 'image/png'.[/COLOR]
          ​​​

          Aber ev. wäre es wirklich die bessere Lösung einfach die Bilder zu erstellen und abzuspeichern.
          Macht das lastmäßig was für den Server besser? Ich meine, dann muss er ja die Bilder nicht immer neu erzeugen, sondern nur prüfen ob schon vorhanden und einbinden. Somit wäre es auch besser, vermutet mein simples Gmüt.

          Auch wenn ich für das andere immer noch gerne eine Lösung finden würde, einfach für mich
          Finde ich etwas, dann werde ich es selbstverständlich preis geben.

          Schönen Abend!
          Harald

          Kommentar


          • #6
            Ich weiß nicht was jetzt anders ist, aber es funktioniert doch. Vielen Dank Jens!!!


            Die Daten aus der Datenbankabfrage werde mittels Linkparameter in die "include_alias.php" übergeben, verarbeitet und ausgegeben.
            Die include_alias.php ist durch den Header als Bild definiert, sollte man nun versuchen es mit include einzubinden funktioniert das ganze nicht.
            Einbinden über den IMG-Tag und nur unter der Angabe des Dateinamen / Dateipfad.


            Die Schleife (mit 4 Fällen (Hintergrund)) in der Seite:​

            PHP-Code:
            while ($ma mysqli_fetch_assoc($abfrage_stb)) {
            switch (
            $i 4) {
            case1: {
            $vorAnfang=substr($ma['vorname'],0,1);
            $nachAnfang=substr($ma['nachname'],0,1);

            echo
            '<div class="alias"><img src="include_alias.php?vor='.urlencode($vorAnfang).'&nach='.urlencode($nachAnfang).'&col=1'.'" alt="AP"></div>';
            break;
            }
            case2: {
            $vorAnfang=substr($ma['vorname'],0,1);
            $nachAnfang=substr($ma['nachname'],0,1);
            echo
            '<div class="alias"><img src="include_alias.php?vor='.urlencode($vorAnfang).'&nach='.urlencode($nachAnfang).'&col=2'.'" alt="AP"></div>';
            break;
            }
            case3: {
            $vorAnfang=substr($ma['vorname'],0,1);
            $nachAnfang=substr($ma['nachname'],0,1);

            echo
            '<div class="alias"><img src="include_alias.php?vor='.urlencode($vorAnfang).'&nach='.urlencode($nachAnfang).'&col=2'.'" alt="AP"></div>';
            break;
            }
            default: {
            $vorAnfang=substr($ma['vorname'],0,1);
            $nachAnfang=substr($ma['nachname'],0,1);
            echo
            '<div class="alias"><img src="include_alias.php?vor='.urlencode($vorAnfang).'&nach='.urlencode($nachAnfang).'&col=1'.'" alt="AP"></div>';
            $i 0;
            break;
            }
            }
            $i++;

            [COLOR=#e67e22]col definiert nur die Schriftfarbe je nach Hintergrund.[/COLOR]

            Die Bild-Datei:

            PHP-Code:
            <?php

            // Daten aus der übergeordneten DB-Abfrage
            $vorAnfang=$_REQUEST["vor"];
            $nachAnfang=$_REQUEST["nach"];
            $farbe=$_REQUEST["col"];
            $alias $vorAnfang.$nachAnfang;

            // Definition als PNG-Bild
            header ("Content-type: image/png");

            // Höhe Breite
            $img_width 150;
            $img_height 150;

            $img imagecreatetruecolor($img_width$img_height);

            $white imagecolorallocate($img255255255);}

            imagesavealpha($imgtrue);
            $color imagecolorallocatealpha($img000127);

            imagefill($img00$color);

            // fonts/Lavigne.ttf - Schrift im Dateisystem
            $font dirname(__FILE__) .'/fonts/Lavigne.ttf';

            // Text auf dem Bild erzeugen
            imagettftext($img90, -45$img_width/20$img_height*3/10$white$font$alias);

            // Typ festlegen
            ImagePNG ($img);

            //Speicher freigeben
            imagedestroy($img);
            ?>


            ​Hoffe das hilft in ZUkunft jemanden nicht 3 Tage zu verbrennen, so wie ich

            Aber es sei angemerkt, dass die Methode mit dem Bild erst in einen Ordner speichern und dann aufzurufen natürlich auch möglich ist.

            Mfg
            Harald

            Kommentar

            Lädt...
            X