node.js - 使用 Nodejs 和 Imagemagick 调整图像大小

标签 node.js mongodb imagemagick

使用 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/

相关文章:

javascript - 如何在nestjs应用程序中使用时刻

java - Spring MongoDB 标准更新

opencv - 手动校正 OpenCV 中的桶形失真,没有棋盘图像

php - Imagemagick 裁剪不工作

node.js - 无法在 EC2 上使用 npm 安装 bcrypt

javascript - Node.js 作为移动 + Angular 管理面板的服务

Java MongoDB 查询

powershell - 使用Windows截图并在cmd中草绘剪贴板临时图像

node.js - 在 NODE Sequelize 的 Bulkcreate 中出错?

ruby-on-rails - 如何对 mongodb/mongoid 脚本进行基准测试,以比较两种不同的查询技术