84

Web から画像を取得し、base64 でエンコードしようとしています。

私がこれまでに持っているのは基本的に次のとおりです。

var request = require('request');
var BufferList = require('bufferlist').BufferList;

bl = new BufferList(),

request({uri:'http://tinypng.org/images/example-shrunk-8cadd4c7.png',responseBodyStream: bl}, function (error, response, body) 
{
    if (!error && response.statusCode == 200) 
    {
        var type = response.headers["content-type"];
        var prefix = "data:" + type + ";base64,";
        var base64 = new Buffer(bl.toString(), 'binary').toString('base64');
        var data = prefix + base64;
        console.log(data);
    }
});

これは解決策にかなり近いようですが、うまく機能させることはできません。データ型を認識し、出力を提供します。

data:image/png;base64

ただし、バッファリスト 'bl' は空のようです。

前もって感謝します!

4

9 に答える 9

168

BufferList の機能は Node コアにあるため、廃止されました。ここでの唯一の注意点は、エンコーディングを使用しないようにリクエストを設定することです。

var request = require('request').defaults({ encoding: null });

request.get('http://tinypng.org/images/example-shrunk-8cadd4c7.png', function (error, response, body) {
    if (!error && response.statusCode == 200) {
        data = "data:" + response.headers["content-type"] + ";base64," + Buffer.from(body).toString('base64');
        console.log(data);
    }
});
于 2013-06-16T11:51:41.073 に答える
8

ストリーミング Base64 エンコーダー/デコーダーであるbase64-stream Node.js モジュールを使用できます。この方法の利点は、全体をメモリにバッファリングする必要がなく、リクエスト モジュールを使用せずに画像を変換できることです。

var http = require('http');
var base64encode = require('base64-stream').Encode;

http.get('http://tinypng.org/images/example-shrunk-8cadd4c7.png', function(res) {
    if (res.statusCode === 200)
        res.pipe(base64encode()).pipe(process.stdout);
});
于 2013-07-09T05:55:33.583 に答える
2

画像をbase64文字列node-base64-image npmモジュールにロードしてエンコードするために使用します。

画像をダウンロードしてエンコードします。

var base64 = require('node-base64-image');

var options = {string: true};
base64.base64encoder('www.someurl.com/image.jpg', options, function (err, image) {
    if (err) {
        console.log(err);
    }
    console.log(image);
});

ローカル イメージをエンコードします。

var base64 = require('node-base64-image');

var path = __dirname + '/../test.jpg',
options = {localFile: true, string: true};
base64.base64encoder(path, options, function (err, image) {  
    if (err) { console.log(err); }  
    console.log(image);  
}); 
于 2016-04-28T00:35:28.883 に答える