#image-processing #canvas #node.js
#обработка изображений #холст #node.js
Вопрос:
Я пытаюсь изменить размер изображения в 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 почему?
Редактировать :
выдает эту ошибку при попытке img.src после подключения событий onload и onerror?
`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)
Использование магии изображения выдает мне эту ошибку :
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')
});
Ответ №1:
Вы уже пробовали настраивать img.src
после прикрепления событий onload
и onerror
? Просто заметил это как разницу между исходным примером и вашим.
Другой вопрос: вызвано ли onerror
событие? Если это так, то созданное исключение может быть полезным.
Обновить
Если вы просто хотите изменить размер изображений и вам не нужно использовать какие-либо операции, специфичные для canvas, просто используйте 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. `Измененный размер и сохраненный в NaNms /home/reach121/rahul/knox/index.js:33 выдает ошибку; ^ Ошибка: ошибка при чтении из входного потока в Object.<анонимный> (/home/reach121/rahul/knox/index.js:35:9) в Module._compile (module.js: 404:26) в Object..js (module.js:410:10) в модуле. загрузка (module.js:336:31) в функцию. _load (module.js:297:12) в Array.0 (module.js:423:10) в EventEmitter._tickCallback (node.js:170:26)
2. @Rahul тебе нужно установить imagemagick. node-imagemagick просто выполняет установленный двоичный файл github.com/rsms/node-imagemagick/blob/master/imagemagick.js
3. пожалуйста, ознакомьтесь с документацией по модулю, прежде чем публиковать дальнейшие ошибки.
4. Я уже установил imagemagick.. Пожалуйста, проверьте ошибку
5. где вы установили imagemagick? внутри вашего окружения PATH или где-то еще (например, в вашем домашнем каталоге)?
Ответ №2:
Для работы модуля node_imagemagick необходимо установить интерфейсы командной строки imagemagick,
На Mac это может быть так же просто, как:
brew install imagemagick
Но это действительно зависит от вашей конкретной системы.
Ответ №3:
__dirname
не имеет завершающей косой черты.
Измените его на это:
img.src = __dirname '/flowers.jpg';
И прикрепите обработчики событий перед установкой img.src, как сказал @schaermu.
Ответ №4:
К вашему сведению, ваша консоль.оператор log использует %d, но после строки, заключенной в кавычки, нет переменной. (Я не уверен, что это устраняет другие ваши ошибки.)