次のコードは、画像ファイルを読み取り、Canvasモジュールを使用してファイルデータをCanvasに追加することを想定しています。
このコードを実行すると、エラーメッセージが表示されます画像が定義されていません。単にインポートしたモジュールから初期化しようとしている画像オブジェクトはありますか?
var http = require('http'), fs = require('fs'),
Canvas = require('canvas');
http.createServer(function (req, res) {
fs.readFile(__dirname + '/image.jpg', function(err, data) {
if (err) throw err;
img = new Image();
img.src = data;
ctx.drawImage(img, 0, 0, img.width / 4, img.height / 4);
res.write('<html><body>');
res.write('<img src="' + canvas.toDataURL() + '" />');
res.write('</body></html>');
res.end();
});
}).listen(8124, "127.0.0.1");
console.log('Server running at http://127.0.0.1:8124/');
ここで間違っていることをお詫びしますが、このコードをどこかで見つけて、実際に何が起こっているのかを理解せずに使用しようとしたようです。 画像が定義されていませんエラーを修正したとしても、他にもたくさんあります。
この投稿の最後に修正されたコードがありますが、質問のコードでこれらの問題についてより深く考えることをお勧めします。
Image
とは何ですか?それはどこから来たのですか? http
、fs
、およびCanvas
をインポートしたので、これらは明らかに定義されています。ただし、Image
はどこにも定義されておらず、組み込みではありません。
実は、Image
は、Canvas = require('canvas')
でインポートしたnode-canvasモジュールからのものです。これは、Image
が_Canvas.Image
_として利用できることを意味します。
これは、設定したインポートが原因であることを理解することが重要です。 abc = require('canvas')
を簡単に実行できれば、Image
は_abc.Image
_として使用できます。
ctx
とは何ですか?それはどこから来たのですか?
繰り返しますが、これはどこにも定義されていない別の変数です。 Image
とは異なり、_Canvas.ctx
_としては利用できません。これは、現時点では何にも対応していない単なる確率変数名であるため、その上でdrawImage
を呼び出そうとすると、例外がスローされます。
canvas
(小文字)はどうですか?それは何ですか?
_canvas.toDataURL
_を使用していますが、canvas
という変数はどこにもありません。このコードが何をすることを期待していますか?今のところ、canvasが未定義であるという例外をスローします。
ドキュメントをより詳しく読み、将来、独自のアプリケーションにコピーするサンプルコードをより詳しく調べることをお勧めします。
これが修正されたコードで、私の変更を説明するコメントがいくつかあります。 https://github.com/learnboost/node-canvas のドキュメントをざっと見て、これを理解しました。
_var http = require('http'), fs = require('fs'),
Canvas = require('canvas');
http.createServer(function (req, res) {
fs.readFile(__dirname + '/image.jpg', function(err, data) {
if (err) throw err;
var img = new Canvas.Image; // Create a new Image
img.src = data;
// Initialiaze a new Canvas with the same dimensions
// as the image, and get a 2D drawing context for it.
var canvas = new Canvas(img.width, img.height);
var ctx = canvas.getContext('2d');
ctx.drawImage(img, 0, 0, img.width / 4, img.height / 4);
res.write('<html><body>');
res.write('<img src="' + canvas.toDataURL() + '" />');
res.write('</body></html>');
res.end();
});
}).listen(8124, "127.0.0.1");
console.log('Server running at http://127.0.0.1:8124/');
_