2016-11-02 12 views
1

私は0から255までの数字の長い配列を持っています。画像であることが分かりますので、ファイルとして保存するにはどうすればいいですか?私は多くのことを試みましたが、成功はしませんでした。
イメージは作成されましたが、イメージが破損して開くことはありません。

ファイルは base64エンコードを使用する理由バイト配列から画像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

バッファを使用するのと同じくらい簡単でした。イメージファイルとして開くにはバイナリ形式で保存する必要があります。 – tebs1200

答えて

2

を.jsファイル?あなたのイメージデータがバイナリとしてデータパラメータにあれば、それを書くことができます。

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

私はそれを試みましたが、まだ動作しません、私は 'data.join()'を書く前に試してみましたが、何もしませんでした。バイト配列はこのプラグイン[jsmediatags](https://github.com/aadsm/JavaScript-ID3-Reader)から来ていますが、次のメソッドを持っていますが、私にはうまくいきません。 'var base64String =" "; for(var i = 0; i

+0

何が問題なのですか?保存した画像の最初のバイトを識別できます。たとえば、pngファイルを保存すると、最初のバイトには "PNG"という文字列が含まれています – sarkiroka

2

これを解決しました。

それはあなたがBase64でエンコードされた文字列としてファイルにデータを書いているように見えます...

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]); 
関連する問題