2

画像を表す base 64 でエンコードされた文字列を取得し、imagemagick ライブラリを使用してその画像のサムネイルを作成し、両方を mongodb に保存する Web サービスがあります。私は次のコードでこれを行っています(おおよそ):

var buf = new Buffer(req.body.data, "base64"); //original image

im.resize({ srcData: buf, width: 256 }, function(err, stdout, stderr) {
    this.thumbnail = new Buffer(stdout, "binary");
    //store buf and stdout in mongo
});

「バイナリ」エンコーディングを使用して Buffer オブジェクトを作成していることに気付くでしょう。これは、ドキュメントでは行うべきではないとされています。

「バイナリ」 - 各文字の最初の 8 ビットのみを使用して生のバイナリ データを文字列にエンコードする方法。このエンコード方法は非推奨であり、可能であれば Buffer オブジェクトを優先して避ける必要があります。このエンコーディングは、Node.js の将来のバージョンでは削除される予定です。

まず、彼らがそこで何を言っているのかわかりません。Buffer オブジェクトを作成しようとしていますが、既に持っている必要があることを暗示しているようです。

次に、問題の原因は、imagemagick の resize メソッドがバイナリ データを含む文字列を返すことにあるようです。typedef(stdout) return "string" を実行して画面に出力すると、文字以外のデータが大量に表示されるように見えます。

それで、私はここで何をしますか?imagemagick の動作を変更することはできません。私がやろうとしていることを行う別の方法はありますか?

4

2 に答える 2

2

それが、mongodbに画像を保存して、同じことを成功させている方法です。

//original ---> base64
var thumbnail = new Buffer(req.body.data).toString('base64');
//you can store this string value in a mongoose model property, and save to mongodb

//base64 ---> image
var buffer = new Buffer(thumbnail, "base64");

画像をbase64として保存するのが最善の方法かどうかはわかりません

于 2012-11-12T13:44:58.533 に答える