精华 Node.js 对图片进行裁切、缩放 (gm)
发布于 2年前 作者 kimady 8747 次浏览 最后一次编辑是 5个月前 来自 分享

转载自:http://blog.csdn.net/kidx_/article/details/9709387

GM : GraphicsMagick for node.js 首先得安装 GraphicsMagick 或者 ImageMagick。 然后执行: $ sudo npm install gm

我安装的是ImageMagick,在ubuntu系统下快速安装: $ sudo apt-get install imagemagick

HOW TO USE GM 文档:http://aheckmann.github.io/gm/docs.html 使用ImageMagick var imageMagick = gm.subClass({ imageMagick: true }); 然后就像文档中使用gm那样使用ImageMagick即可(举个例子) imageMagick(“img.png”).resize(300, 100).autoOrient().write('/path’, callback);

Example (nodejs + Express)

var gm = require('gm')
,  fs = require('fs')
,   imageMagick = gm.subClass({ imageMagick : true });
exports.imgUpload = function(req, res) {
    res.header('Content-Type', 'text/plain');
  var path = req.files.img.path;    //获取用户上传过来的文件的当前路径
  var sz = req.files.img.size;
  if (sz > 2*1024*1024) {
    fs.unlink(path, function() {    //fs.unlink 删除用户上传的文件
      res.end('1');
    });
  } else if (req.files.img.type.split('/')[0] != 'image') {
    fs.unlink(path, function() {
      res.end('2');
    });
  } else {
    imageMagick(path)
    .resize(150, 150, '!') //加('!')强行把图片缩放成对应尺寸150*150!
    .autoOrient()
    .write('public/images/user/'+req.files.img.name, function(err){
      if (err) {
        console.log(err);
        res.end();
      }
      fs.unlink(path, function() {
        return res.end('3');
      });
    });
  }
};

上面只是index.js文件的部分核心代码 点击去下载完整Example

示例运行截图: alt example

可以查看 public/images/user/ 里面的图片,验证你上传的图片是否被缩放了。

同理可对图片进行裁切: gm(“img.png”).crop(width, height, x, y)

详情看gm的文档http://aheckmann.github.io/gm/docs.html

26 回复

分享是不错的顶一下,但是附件csdn这个就要喷一下了,我擦csdn就TM垃圾站,密码泄露事件导致我的邮箱现在经常收到垃圾信息。

这个,在win下是不是不能用这个东西?

可以 先要安装GraphicsMagick

var gm = require(‘gm’);

app.post('/cut’, function(req, res) { var imgPath = req.files.uploadFile.path; var imgSize = req.files.uploadFile.size; var imgName = req.files.uploadFile.name;

console.log(imgPath); console.log(imgSize); console.log(imgName);

var imageMagick = gm.subClass({ imageMagick : true });

imageMagick(imgPath).resize(150, 150, ‘!’).autoOrient().write('public/images/user/’+ imgName, function(err){ if (err) { console.log(err); } });

res.send(‘11’); });

最后打印的err: { [Error: Command failed: Ч - -resize ] code: 4, signal: null }

能不能告诉下,这是为什么呢?

仔细看一下文档,有一个专门做缩略图的函数,可以调整大小和质量

gm("img.png").thumb(width, height, outName, quality, callback)

不过似乎 gm.resize.quality.write 更合适……

跟你遇到同样的问题

有gm剪切的事例吗? 我搞了老半天没搞好

可以参考下这个:

gm(image)  
.resize(options.width, options.height, '^')  
.gravity(options.crop)  
.extent(options.width, options.height)  
.toBuffer(callback);  

可以试试 缩略图云,只需简单的发送请求,就可以获得缩略图了。再也不用考虑其他事情了。

@chihuohuo 在Windows下安装GM后, 例子中始终报 “异常错误!可能不支持该格式的图片。”

正式运营:0.01元RMB/请求 也太贵了吧,类似七牛/upyun/阿里云图像处理之类的成熟方案都没那么高的价格。

@usherwong 怎么都不支持win7 64bit的系统啊。下载下的代码运行和上面的报错一样。

@ContentCoder 七牛可以自由更改图片格式,大小,每月10G空间免费,10G免费流量。。。

@snoopy @shiny @conContentCoder 用七牛爽。现在的云储存服务都会提供图片裁剪了。

ImageMagick 安装在window是上还是要报错啊 求大神解救下 { [Error: Command failed: Ч - -resize ] code: 4, signal: null }

gm 有一个缺点——实际上是通过命令行来的。

最好还是有大神跳出来自己写个扩展什么的吧。

咦,这不是我一年前看到的帖子吗?

@alsotang @snoopy 国外的有啥推荐,用不了国内的。

@alsotang @.@ 我去研究一下

@a4712020502 用graphicmagick,还要再安装Ghostscript。

回到顶部