我正试图通过这个程序在node.js中调整图像大小。
https://github.com/LearnBoost/node-canvas/blob/master/examples/resize.js
var Canvas = require('canvas')
, Image = Canvas.Image
, fs = require('fs');
var img = new Image
, start = new Date;
img.src = __dirname + 'flowers.jpg';
console.log('Resized and saved in %dms');
img.onload = function(){
console.log('Resized and saved in buffer');
try{
var width = img.width / 2
, height = img.height / 2
, canvas = new Canvas(width, height)
, ctx = canvas.getContext('2d');
ctx.drawImage(img, 0, 0, width, height);
canvas.toBuffer(function(err, buf){
console.log('Resized and saved in buffer');
fs.writeFile(__dirname + '/resize.jpg', buf, function(){
console.log('Resized and saved in %dms', new Date - start);
});
});
}catch(e){
console.log(sys.inspect(e));
}
};
img.onerror = function(err){
throw err;
};
程序是不是在onload函数中为什么? 编辑: 在附加onload和onerror事件后尝试img.src时出现此错误?
`Resized and saved in NaNms
/home/reach121/rahul/knox/index.js:33
throw err;
^
Error: error while reading from input stream
at Object.<anonymous> (/home/reach121/rahul/knox/index.js:35:9)
at Module._compile (module.js:404:26)
at Object..js (module.js:410:10)
at Module.load (module.js:336:31)
at Function._load (module.js:297:12)
at Array.0 (module.js:423:10)
at EventEmitter._tickCallback (node.js:170:26)
使用Image Magic给我这个错误:
reach121@youngib:~/rahul/knox$ sudo node index.js
node.js:178
throw e; // process.nextTick error, or 'error' event on first tick
^
Error: Command failed: execvp(): No such file or directory
at ChildProcess.<anonymous> (/usr/local/lib/node/.npm/imagemagick/0.1.2/package/imagemagick.js:64:15)
at ChildProcess.emit (events.js:67:17)
at Socket.<anonymous> (child_process.js:172:12)
at Socket.emit (events.js:64:17)
at Array.<anonymous> (net.js:826:12)
at EventEmitter._tickCallback (node.js:170:26)
代码:
var im = require('imagemagick');
im.resize({
srcPath: __dirname + '/flowers.jpg',
dstPath: __dirname + '/flowers-small.jpg',
width: '50%'
}, function(err, stdout, stderr){
if (err) throw err
console.log('resized')
});
答案 0 :(得分:5)
您是否在添加img.src
和onload
事件后尝试设置onerror
?刚刚注意到这是原始示例与您的示例之间的区别。
另一个问题:onerror
事件是否被触发?如果是这样,抛出的异常可能会有所帮助。
<强>更新强>
如果您只想调整图片大小而不需要使用任何特定于画布的操作,只需使用ImageMagick和node-imagemagick即可。我只做了一个小测试,开箱即用:
var im = require('imagemagick');
im.resize({
srcPath: __dirname + '/koala.jpg',
dstPath: __dirname + '/koala-small.jpg',
width: '50%'
}, function(err, stdout, stderr){
if (err) throw err
console.log('resized')
});
答案 1 :(得分:2)
要使node_imagemagick模块正常工作,您需要安装imagemagick CLI界面,
在Mac上,它可以像以下一样简单:
brew install imagemagick
但这实际上取决于您的具体系统。
答案 2 :(得分:0)
__dirname
没有尾部斜杠。
将其更改为:
img.src = __dirname + '/flowers.jpg';
在设置img.src之前附上事件处理程序,如@schaermu所说。
答案 3 :(得分:0)
仅供参考,您的console.log语句使用%d,但在引用的字符串后面没有变量。 (我不确定这会解决你的其他错误。)