convertire base64 in immagine in javascript / jquery

Ho scritto del codice per l’acquisizione di immagini usando javascript / jquery Di seguito è riportato il codice:

function capture_image(){ alert("capture_image"); var p = webcam.capture(); webcam.save(); alert("capture complete "+p); //getting true here var img = canvas.toDataURL("image"); var item_image = img.replace(/^data:image\/(png|jpg);base64,/, "") ; alert("item_image"+item_image); } 

L’elemento item_image stampa il formato base64, Come convertire quello base64 in immagine e come usare quel percorso in clientview javascript.

Sto cercando su Google così tanti siti web ma non funziona e quel codice non è adatto alle mie esigenze.

Puoi semplicemente creare un object Image e mettere la base64 come sua src , inclusa la parte data:image... questo modo :

 var image = new Image(); image.src = 'data:image/png;base64,iVBORw0K...'; document.body.appendChild(image); 

È ciò che chiamano “Data URIs” e qui è la tabella di compatibilità per la pace interiore.

Questo non è esattamente lo scenario dell’OP ma una risposta a quelli di alcuni dei commentatori. È una soluzione basata su Cordova e Angular 1, che dovrebbe essere adattabile ad altri framework come jQuery. Ti dà un Blob dai dati Base64 che puoi memorizzare da qualche parte e fare riferimento da lato client javascript / html.

Risponde anche alla domanda originale su come ottenere un’immagine (file) dai dati di Base 64:

La parte importante è la Base 64 – Conversione binaria:

 function base64toBlob(base64Data, contentType) { contentType = contentType || ''; var sliceSize = 1024; var byteCharacters = atob(base64Data); var bytesLength = byteCharacters.length; var slicesCount = Math.ceil(bytesLength / sliceSize); var byteArrays = new Array(slicesCount); for (var sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) { var begin = sliceIndex * sliceSize; var end = Math.min(begin + sliceSize, bytesLength); var bytes = new Array(end - begin); for (var offset = begin, i = 0; offset < end; ++i, ++offset) { bytes[i] = byteCharacters[offset].charCodeAt(0); } byteArrays[sliceIndex] = new Uint8Array(bytes); } return new Blob(byteArrays, { type: contentType }); } 

Il taglio è necessario per evitare errori di memoria insufficiente.

Funziona con file jpg e pdf (almeno questo è quello che ho testato). Dovrebbe funzionare anche con altri mimetypes / contenttypes. Controlla i browser e le loro versioni a cui miri, devono supportare Uint8Array, Blob e atob.

Ecco il codice per scrivere il file nella memoria locale del dispositivo con Cordova / Android:

 ... window.resolveLocalFileSystemURL(cordova.file.externalDataDirectory, function(dirEntry) { // Setup filename and assume a jpg file var filename = attachment.id + "-" + (attachment.fileName ? attachment.fileName : 'image') + "." + (attachment.fileType ? attachment.fileType : "jpg"); dirEntry.getFile(filename, { create: true, exclusive: false }, function(fileEntry) { // attachment.document holds the base 64 data at this moment var binary = base64toBlob(attachment.document, attachment.mimetype); writeFile(fileEntry, binary).then(function() { // Store file url for later reference, base 64 data is no longer required attachment.document = fileEntry.nativeURL; }, function(error) { WL.Logger.error("Error writing local file: " + error); reject(error.code); }); }, function(errorCreateFile) { WL.Logger.error("Error creating local file: " + JSON.stringify(errorCreateFile)); reject(errorCreateFile.code); }); }, function(errorCreateFS) { WL.Logger.error("Error getting filesystem: " + errorCreateFS); reject(errorCreateFS.code); }); ... 

Scrivere il file stesso:

 function writeFile(fileEntry, dataObj) { return $q(function(resolve, reject) { // Create a FileWriter object for our FileEntry (log.txt). fileEntry.createWriter(function(fileWriter) { fileWriter.onwriteend = function() { WL.Logger.debug(LOG_PREFIX + "Successful file write..."); resolve(); }; fileWriter.onerror = function(e) { WL.Logger.error(LOG_PREFIX + "Failed file write: " + e.toString()); reject(e); }; // If data object is not passed in, // create a new Blob instead. if (!dataObj) { dataObj = new Blob(['missing data'], { type: 'text/plain' }); } fileWriter.write(dataObj); }); }) } 

Sto usando le ultime versioni di Cordova (6.5.0) e Plugin:

Spero che questo metta tutti nella giusta direzione.

 var src = "data:image/jpeg;base64,"; src += item_image; var newImage = document.createElement('img'); newImage.src = src; newImage.width = newImage.height = "80"; document.querySelector('#imageContainer').innerHTML = newImage.outerHTML;//where to insert your image 

html

  

Js

 string baseStr64="/9j/4AAQSkZJRgABAQE..."; imgElem.setAttribute('src', "data:image/jpg;base64," + baseStr64); 

Un modo semplice e veloce:

 function paintSvgToCanvas(uSvg, uCanvas) { var pbx = document.createElement('img'); pbx.style.width = uSvg.style.width; pbx.style.height = uSvg.style.height; pbx.src = 'data:image/svg+xml;base64,' + window.btoa(uSvg.outerHTML); uCanvas.getContext('2d').drawImage(pbx, 0, 0); }