Canvas Datei auf Server per PHP speichern

  • Hallo,


    ich würde gerne das per JS generierte Canvas per PHP auf dem Server in einem Verzeichnis speichern.


    Hierfür habe ich folgendes versucht


    und hier einmal die upload.php

    Code
    define('UPLOAD_DIR', 'images/');
        $img = $_POST['img'];
        $img = str_replace('data:image/png;base64,', '', $img);
        $img = str_replace(' ', '+', $img);
        $data = base64_decode($img);
        $file = UPLOAD_DIR . uniqid() . '.png';
        $success = file_put_contents($file, $data);
        print $success ? $file : 'Unable to save the file.';

    Das ganze funktioniert jedoch leider nicht.


    Ich bedanke mich im Voraus für die freundlichen Hilfestellungen.:)

  • So etwas habe ich vor längerer Zeit auch Mal kodiert.

    Javascript:

    Code
                    var canvas = document.getElementById('mycanvas');
                    var dataURL = canvas.toDataURL();
                    $.ajax({
                        type: "POST",
                        url: "savepic.php",
                        data: { img: dataURL }
                    }).done(function (msg) {
                        alert(msg);
                    });

    savepic.php:

    Wie ich sehe, sieht dein PHP meinem sehr ähnlich, wahrscheinlich aus der selben Quelle gefischt.

  • Hallo,


    anscheinend bin ich einfach zu blöd ^^


    Also, leider passiert bei mir gar nichts beim Klick auf den Button.


    Code sieht jetzt wie folgt aus:


  • Dieses:

    Code
        var img=document.getElementById("NAME DER BILDDATEI");
        ctx.drawImage(img,(ctx.canvas.width-200)/2,0);

    führt zu einem Fehler, da das betr. img-Element nicht definiert ist. Ich habe es deshalb hinzu gefügt und unsichtbar gemacht.

    Und dieses:

    Code
    ctx.globalCompositeOperation='source-atop';

    verhindert anscheinend das Füllen. Ich kenne es noch nicht und habe es zunächst mal auskommentiert. Ebenso das Füllen, weil es dann alles andere überschreibt.

    Dies funktioniert dann bei mir:

    Und, soweit ich mir erinnere, muss das Upload-Verzeichnis existieren, damit das Hochladen funktioniert.

  • Moin,


    nun möchte ich noch den Inhalt von tgroup (Funktion getGroup) per Ajax mit an die upload.php schicken, um den Dateinamen "test-$tgroup.png" setzen zu können.


    Ich habe hierfür bereits data: { img: dataURL, tgroup : tgroup } ausprobiert, jedoch leider erfolglos.


    Wie müsste das Aussehen?


    Meine upload.php sieht wie folgt aus:


  • Hiermit:

    data: { img: dataURL, tgroup : tgroup }

    übergibst du nicht den Inhalt des input-Feldes sondern das ganze DOM-Element. So sollte es funktionieren:

    Code
                    var canvas = document.getElementById('mycanvas');
                    var dataURL = canvas.toDataURL();
                    var grp = document.getElementById('tGroup').value;
                    $.ajax({
                        type: "POST",
                        url: "savepic.php",
                        data: { img: dataURL, tgroup: grp }
                    }).done(function (msg) {
                        alert(msg);
                    });

    Und mit dem PHP bist Du ja schon auf dem richtigen Wege:

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!