1. ホーム
  2. node.js

[解決済み] Node.js ウェブから画像を取得し、base64でエンコードする。

2023-05-23 12:48:47

質問

私はウェブから画像を取得し、それを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'が空になっているようです。

ありがとうございます。

どのように解決するのですか?

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);
    }
});