使用 nodejs 和 imagemagick 可以调整图像大小并将其发送到浏览器。
var http = require('http'),
spawn = require('child_process').spawn;
http.createServer(function(req, res) {
var image = 'test.jpg';
var convert = spawn('convert', [image, '-resize', '100x100', '-']);
convert.stdout.pipe(res);
convert.stderr.pipe(process.stderr);
}).listen(8080);
测试图像是从文件系统中读取的,我想改变测试图像是一个二进制字符串。
var image = 'some long binray string representing an image.......';
我的计划是将二进制字符串存储在 Mongodb 中并动态读取它们。
最佳答案
看看 Node 模块node-imagemagick .模块页面上有以下示例,用于调整大小和图像并将其写入文件...
var fs = require('fs');
im.resize({
srcData: fs.readFileSync('kittens.jpg', 'binary'),
width: 256
}, function(err, stdout, stderr){
if (err) throw err
fs.writeFileSync('kittens-resized.jpg', stdout, 'binary');
console.log('resized kittens.jpg to fit within 256x256px')
});
您可以更改此代码以执行以下操作...
var mime = require('mime') // Get mime type based on file extension. use "npm install mime"
, fs = require('fs')
, util = require('util')
, http = require('http')
, im = require('imagemagick');
http.createServer(function (req, res) {
var filePath = 'test.jpg';
fs.stat(filePath, function (err, stat) {
if (err) { throw err; }
fs.readFile(filePath, 'binary', function (err, data) {
if (err) { throw err; }
im.resize({
srcData: data,
width: 256
}, function (err, stdout, stderr) {
if (err) { throw err; }
res.writeHead(200, {
'Content-Type': mime.lookup(filePath),
'Content-Length': stat.size
});
var readStream = fs.createReadStream(filePath);
return util.pump(readStream, res);
});
});
});
}).listen(8080);
附言。还没有运行上面的代码。很快就会尝试这样做,但它应该让您了解如何异步调整文件大小和流式传输文件。
关于node.js - 使用 Nodejs 和 Imagemagick 调整图像大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11599357/