2016-11-02 1 views
1

Ich habe eine lange Reihe von Bytes, mit Zahlen von 0 bis 255, und ich weiß, es ist ein Bild, also Wie kann ich es wie eine Datei speichern? Ich habe viele Dinge ausprobiert, aber keinen Erfolg.
Das Bild wird erstellt, wird aber nicht geöffnet, da es beschädigt ist.

Datei .jsByte-Array in ein Bild Node.js

function saveImage(filename, data){ 
    //Data = [1,6,2,23,255,etc] 
    var wstream = fs.createWriteStream(ARTWORK_PATH+filename); 
    for (var i = 0; i < data.length; i++) { 
     wstream.write(data[i].toString('base64')); 
    } 
    wstream.end(); 
} 
+0

Es sieht aus wie Sie die Daten in eine Datei als Base64-codierte Zeichenfolge gerade schreiben. Sie müssen es im Binärformat speichern, damit es als Image-Datei geöffnet wird. – tebs1200

Antwort

2

Warum Base64-Codierung verwenden? Wenn Ihre Bilddaten im Datenparameter binär sind, können Sie sie schreiben.

fs.writeFile(filename, data, "binary", function(){...}); 
+0

Ich habe das versucht, aber immer noch nicht funktioniert, ich habe auch versucht 'data.join()' vor dem Schreiben, aber nichts. Das Byte-Array kommt von diesem Plugin [jsmediatags] (https://github.com/aadsm/JavaScript-ID3-Reader), sie haben die nächste Methode, es zu tun, funktioniert aber nicht für mich. 'var base64String =" "; für (var i = 0; i

+0

Was ist los? vielleicht können Sie die ersten Bytes Ihres gespeicherten Bildes identifizieren. Wenn Sie zum Beispiel eine PNG-Datei speichern, enthalten die ersten Bytes die Zeichenfolge "PNG", die Sie lesen können – sarkiroka

2

Ich löste es dies zu tun!

Es war so einfach, wie einen Puffer verwenden ...

function saveImage(filename, data){ 
    var myBuffer = new Buffer(data.length); 
    for (var i = 0; i < data.length; i++) { 
     myBuffer[i] = data[i]; 
    } 
    fs.writeFile(ARTWORK_PATH+filename, myBuffer, function(err) { 
     if(err) { 
      console.log(err); 
     } else { 
      console.log("The file was saved!"); 
     } 
    }); 
} 
saveImage("image.jpg", [0,43,255,etc]);