画像を表す 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 の動作を変更することはできません。私がやろうとしていることを行う別の方法はありますか?