Ich verwende das JavaScript-Tool "Canvas2Image" von Nihilogic, um Leinwandzeichnungen in PNG-Bilder zu konvertieren. Was ich jetzt brauche, ist, die von diesem Tool generierten base64-Zeichenfolgen mithilfe von PHP in tatsächliche PNG-Dateien auf dem Server umzuwandeln.
Kurz gesagt, ich generiere derzeit eine Datei auf der Clientseite mit Canvas2Image, rufe dann die base64-codierten Daten ab und sende sie mit AJAX an den Server:
// Generate the image file
var image = Canvas2Image.saveAsPNG(canvas, true);
image.id = "canvasimage";
canvas.parentNode.replaceChild(image, canvas);
var url = 'hidden.php',
data = $('#canvasimage').attr('src');
$.ajax({
type: "POST",
url: url,
dataType: 'text',
data: {
base64data : data
}
});
Zu diesem Zeitpunkt empfängt "hidden.php" einen Datenblock, der wie Daten aussieht : image / png; base64, iVBORw0KGgoAAAANSUhEUgAABE ...
Von diesem Punkt an bin ich ziemlich ratlos. Nach dem , was ich gelesen habe, glaube ich, dass ich die Imagecreatefromstring- Funktion von PHP verwenden soll , bin mir aber nicht sicher, wie ich tatsächlich ein tatsächliches PNG-Image aus der base64-codierten Zeichenfolge erstellen und auf meinem Server speichern soll. Bitte helfen Sie!
quelle
Antworten:
Sie müssen die base64-Bilddaten aus dieser Zeichenfolge extrahieren, dekodieren und dann auf der Festplatte speichern. Sie benötigen GD nicht, da es sich bereits um ein PNG handelt.
Und als Einzeiler:
Eine effiziente Methode zum Extrahieren, Dekodieren und Überprüfen auf Fehler ist:
quelle
$type
wird ein Wert von der Explosion zugewiesen, abhängig davon, ob es Daten sind: Bild / JPG oder Daten: Bild / PNG usw.Versuche dies:
file_put_contents docs
quelle
data:image/png;base64,
was die Datei bricht.data:image/png;base64,
die Zeichenfolge einschließen, ist die Zeichenfolge, an die Sie übergeben,base64_decode
nicht gültig. Sie müssen nur die Daten senden, wie die Antwort von draw010 zeigt. An dieser Antwort ist nichts kaputt. Sie können nicht kopieren und einfügen, ohne es zu verstehen, und erwarten, dass es "nur funktioniert".Ich musste Leerzeichen durch Pluszeichen ersetzen
str_replace(' ', '+', $img);
, damit dies funktioniert.Hier ist der vollständige Code
Hoffentlich hilft das.
quelle
$img = str_replace(' ', '+', $img);
hat mir sehr geholfen, danke! Warum muss ich das Leerzeichen vorher in "+" konvertieren?Es ist erwähnenswert, dass das diskutierte Thema in RFC 2397 - Das URL-Schema "Daten" ( https://tools.ietf.org/html/rfc2397 ) dokumentiert ist.
Aus diesem Grund hat PHP eine native Methode, um mit solchen Daten umzugehen - "data: stream wrapper" ( http://php.net/manual/en/wrappers.data.php )
So können Sie Ihre Daten einfach mit PHP-Streams bearbeiten:
quelle
preg_replace
+file_put_contents
?Nun, Ihre obige Lösung hängt davon ab, ob das Bild eine JPEG-Datei ist. Für eine allgemeine Lösung habe ich verwendet
quelle
Ausgehend von der @ dre010-Idee habe ich sie auf eine andere Funktion erweitert, die mit jedem Bildtyp funktioniert: PNG, JPG, JPEG oder GIF und dem Dateinamen einen eindeutigen Namen gibt
Die Funktion trennt Bilddaten und Bildtyp
quelle
Total Bedenken:
quelle
Einlineare Lösung.
quelle
basierend auf dem Beispiel draw010 habe ich ein Arbeitsbeispiel zum leichteren Verständnis erstellt.
quelle
Versuche dies...
quelle
Dieser Code funktioniert für mich. Überprüfen Sie den folgenden Code:
quelle
Diese Funktion sollte funktionieren. Dies hat den Fotoparameter, der die base64-Zeichenfolge enthält, sowie den Pfad zu einem vorhandenen Bildverzeichnis, falls Sie bereits ein vorhandenes Bild haben, dessen Verknüpfung Sie beim Speichern des neuen Bilds aufheben möchten.
quelle
Es ist einfach :
Stellen Sie sich vor, Sie versuchen, eine Datei innerhalb des JS-Frameworks, der Ajax-Anfrage oder der mobilen Anwendung (Client-Seite) hochzuladen.
Hier erfahren Sie, wie es mit PHP geht
quelle
Wenn Sie Bilder nach dem Zufallsprinzip umbenennen und sowohl den Bildpfad in der Datenbank als Blob als auch das Bild selbst in Ordnern speichern möchten, hilft Ihnen diese Lösung. Die Benutzer Ihrer Website können so viele Bilder speichern, wie sie möchten, während die Bilder aus Sicherheitsgründen zufällig umbenannt werden.
PHP-Code
Generieren Sie zufällige Varchars, die als Bildname verwendet werden sollen.
Holen Sie sich die Bilddatenerweiterung und den base_64-Teil (Teil nach den Daten: image / png; base64,) aus dem Image.
quelle
PHP hat bereits eine faire Behandlung base64 -> Dateitransformation
Ich benutze es, um es auf folgende Weise zu erledigen:
quelle