2016-04-12 41 views
2

Düğüm sunucusunda, karşıya yüklenen datauri verilerini bir görüntü olarak kaydetmek istiyorum. Bunun içeriğini deşifre denedim Bunu yapmak içinVeri URI'sını Görüntü Olarak Kaydetme?

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAIAAAFlEcHbAAAAB3RJTUUH1gMWFjk7nUWcXQAAAAlwSFlzAABOIAAATiABFn2Z3gAAAARnQU1BAACxjwv8YQUAAAAeSURBVHjaY7h79y7DhAkTGIA04/Tp0xkYGJ49ewYAgYwLV/R7bDQAAAAASUVORK5CYII= 

png- Ve .png uzantısı olarak kaydederek. Bundan daha fazlası var gibi görünüyor. Datauri'yi nasıl çözerim ve dosya olarak nasıl kaydederim?

cevap

0

Sen kodunun altına kullanarak bir blob veri uri dönüştürebilirsiniz:

function dataURItoBlob(dataURI) { 
    var byteStr; 
    if (dataURI.split(',')[0].indexOf('base64') >= 0) 
     byteStr = atob(dataURI.split(',')[1]); 
    else 
     byteStr = unescape(dataURI.split(',')[1]); 

    var mimeStr = dataURI.split(',')[0].split(':')[1].split(';')[0]; 

    var arr= new Uint8Array(byteStr.length); 
    for (var i = 0; i < byteStr.length; i++) { 
     arr[i] = byteStr.charCodeAt(i); 
    } 

    return new Blob([arr], {type:mimeStr}); 
} 

ve sonra verilerden bu blob veri eklenecek ve bir dosya olarak yükleyebilirsiniz:

var blob = dataURItoBlob(dataURI); 
var fd = new FormData(document.forms[0]); 
fd.append("image", blob); 
+0

. Bunu bir dosya olarak kaydetmek için aynı yöntem kullanılır mı? –

1

ben atob kullanarak verileri çözmeyi ve bunu bir png dosyası olarak kaydetmeyi deniyordu. Bunun yerine kodlanmış base64'leri kaydetmem ancak yazma arabelleğinde kodlamayı belirtiyorum. Bir kitaplık oluşturduk

fs.writeFileSync('tmp/myfile.png', new Buffer(data, 'base64'));

2

kodlama ve veri URI şemaları çözme yardımcı olur node.js ile kullanılacak. Ben kontrol size yardımcı olabilir inanıyoruz:

https://github.com/DiegoZoracKy/image-data-uri

Bu kütüphaneyi kullanarak, senin durumunda, kod olurdu: Ben sunucu üzerinde bunu yapmak daha kolay olurdu gibi hissediyorum

'use strict'; 

const ImageDataURI = require('image-data-uri'); 

const dataURI = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAIAAAFlEcHbAAAAB3RJTUUH1gMWFjk7nUWcXQAAAAlwSFlzAABOIAAATiABFn2Z3gAAAARnQU1BAACxjwv8YQUAAAAeSURBVHjaY7h79y7DhAkTGIA04/Tp0xkYGJ49ewYAgYwLV/R7bDQAAAAASUVORK5CYII='; 
const fileName = 'decoded-image.png'; 

ImageDataURI.outputFile(dataURI, filePath); 
+0

Teşekkürler, bir çekicilik gibi çalışır! – hayatbiralem

+0

@hayatbiralem Great;) –