Ich muss mein Bild in eine Base64-Zeichenkette umwandeln, damit ich mein Bild an einen Server senden kann.
Gibt es eine JavaScript-Datei für diese Aufgabe? Wie kann ich sie sonst konvertieren?
Ich muss mein Bild in eine Base64-Zeichenkette umwandeln, damit ich mein Bild an einen Server senden kann.
Gibt es eine JavaScript-Datei für diese Aufgabe? Wie kann ich sie sonst konvertieren?
Es gibt mehrere Ansätze, die Sie wählen können:
Laden Sie das Bild als Blob über XMLHttpRequest und verwenden Sie die FileReader API ( readAsDataURL() ), um sie in eine dataURL :
function toDataURL(url, callback) {
var xhr = new XMLHttpRequest();
xhr.onload = function() {
var reader = new FileReader();
reader.onloadend = function() {
callback(reader.result);
}
reader.readAsDataURL(xhr.response);
};
xhr.open('GET', url);
xhr.responseType = 'blob';
xhr.send();
}
toDataURL('https://www.gravatar.com/avatar/d50c83cc0c6523b4d3f6085295c953e0', function(dataUrl) {
console.log('RESULT:', dataUrl)
})
Dieses Codebeispiel könnte auch mit Hilfe der WHATWG implementiert werden API abrufen :
const toDataURL = url => fetch(url)
.then(response => response.blob())
.then(blob => new Promise((resolve, reject) => {
const reader = new FileReader()
reader.onloadend = () => resolve(reader.result)
reader.onerror = reject
reader.readAsDataURL(blob)
}))
toDataURL('https://www.gravatar.com/avatar/d50c83cc0c6523b4d3f6085295c953e0')
.then(dataUrl => {
console.log('RESULT:', dataUrl)
})
Diese Ansätze:
fehlende Browserunterstützung
eine bessere Kompression haben
auch für andere Dateitypen funktionieren
Browser-Unterstützung:
Laden Sie das Bild in ein Image-Objekt, malen Sie es auf eine unveränderte Leinwand und konvertieren Sie die Leinwand zurück in eine dataURL.
function toDataURL(src, callback, outputFormat) {
var img = new Image();
img.crossOrigin = 'Anonymous';
img.onload = function() {
var canvas = document.createElement('CANVAS');
var ctx = canvas.getContext('2d');
var dataURL;
canvas.height = this.naturalHeight;
canvas.width = this.naturalWidth;
ctx.drawImage(this, 0, 0);
dataURL = canvas.toDataURL(outputFormat);
callback(dataURL);
};
img.src = src;
if (img.complete || img.complete === undefined) {
img.src = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==";
img.src = src;
}
}
toDataURL(
'https://www.gravatar.com/avatar/d50c83cc0c6523b4d3f6085295c953e0',
function(dataUrl) {
console.log('RESULT:', dataUrl)
}
)
Unterstützte Eingabeformate:
image/png
, image/jpeg
, image/jpg
, image/gif
, image/bmp
, image/tiff
, image/x-icon
, image/svg+xml
, image/webp
, image/xxx
Unterstützte Ausgabeformate:
image/png
, image/jpeg
, image/webp
(Chrom)
Browser-Unterstützung:
Internet Explorer 10 (Internet Explorer 10 funktioniert nur mit Bildern gleichen Ursprungs)
Wenn Sie Bilder aus dem Dateisystem des Benutzers konvertieren möchten, müssen Sie einen anderen Ansatz wählen. Verwenden Sie die FileReader API :
function encodeImageFileAsURL(element) {
var file = element.files[0];
var reader = new FileReader();
reader.onloadend = function() {
console.log('RESULT', reader.result)
}
reader.readAsDataURL(file);
}
<input type="file" onchange="encodeImageFileAsURL(this)" />
Sie können die HTML5 <canvas>
für sie:
Erstellen Sie eine Leinwand, laden Sie Ihr Bild hinein und verwenden Sie dann toDataURL()
um die Base64-Darstellung zu erhalten (eigentlich ist es eine data:
URL, aber sie enthält das Base64-kodierte Bild).
Dieses Snippet kann Ihre String-, Bild- und sogar Videodatei in Base64-Stringdaten konvertieren.
<input id="inputFileToLoad" type="file" onchange="encodeImageFileAsURL();" />
<div id="imgTest"></div>
<script type='text/javascript'>
function encodeImageFileAsURL() {
var filesSelected = document.getElementById("inputFileToLoad").files;
if (filesSelected.length > 0) {
var fileToLoad = filesSelected[0];
var fileReader = new FileReader();
fileReader.onload = function(fileLoadedEvent) {
var srcData = fileLoadedEvent.target.result; // <--- data: base64
var newImage = document.createElement('img');
newImage.src = srcData;
document.getElementById("imgTest").innerHTML = newImage.outerHTML;
alert("Converted Base64 version is " + document.getElementById("imgTest").innerHTML);
console.log("Converted Base64 version is " + document.getElementById("imgTest").innerHTML);
}
fileReader.readAsDataURL(fileToLoad);
}
}
</script>
Grundsätzlich gilt: Wenn Ihr Bild
<img id='Img1' src='someurl'>
dann können Sie es wie folgt umwandeln
var c = document.createElement('canvas');
var img = document.getElementById('Img1');
c.height = img.naturalHeight;
c.width = img.naturalWidth;
var ctx = c.getContext('2d');
ctx.drawImage(img, 0, 0, c.width, c.height);
var base64String = c.toDataURL();
Ich habe Folgendes getan:
// Author James Harrington 2014
function base64(file, callback){
var coolFile = {};
function readerOnload(e){
var base64 = btoa(e.target.result);
coolFile.base64 = base64;
callback(coolFile)
};
var reader = new FileReader();
reader.onload = readerOnload;
var file = file[0].files[0];
coolFile.filetype = file.type;
coolFile.size = file.size;
coolFile.filename = file.name;
reader.readAsBinaryString(file);
}
Und so verwenden Sie es
base64( $('input[type="file"]'), function(data){
console.log(data.base64)
})
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.