Node.js 对图片进行裁切、缩放 (gm)

Node.js 对图片进行裁切、缩放 (gm)

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

37 回复

好的,下面是关于如何使用 Node.js 中的 gm(GraphicsMagick)库来对图片进行裁剪和缩放的文章内容。


Node.js 对图片进行裁切、缩放 (gm)

在 Node.js 中处理图片是一个常见的需求。gm 库提供了强大的功能来对图片进行各种操作,包括裁剪、缩放等。本篇将介绍如何使用 gm 库来实现这些功能。

安装 gm 库

首先,你需要安装 gm 库。可以通过 npm 来安装:

npm install gm

基本使用

以下是一些基本的示例代码,展示如何使用 gm 进行图片的裁剪和缩放。

裁剪图片

假设我们有一个名为 input.jpg 的图片文件,我们希望将其裁剪成一个正方形,并保存为 output.jpg

const gm = require('gm').subClass({ imageMagick: true });

gm('./input.jpg')
  .crop(200, 200) // 裁剪 200x200 的区域
  .write('./output.jpg', (err) => {
    if (err) throw err;
    console.log('裁剪完成');
  });
缩放图片

如果我们想将图片缩小到宽度为 100 像素并保持原始比例,可以这样做:

const gm = require('gm').subClass({ imageMagick: true });

gm('./input.jpg')
  .resize(100) // 将宽度设为 100 像素,高度按比例调整
  .write('./output.jpg', (err) => {
    if (err) throw err;
    console.log('缩放完成');
  });

综合示例

假设我们需要将一张图片先裁剪成正方形,然后再缩小到宽度为 100 像素:

const gm = require('gm').subClass({ imageMagick: true });

gm('./input.jpg')
  .gravity('Center') // 设置中心点
  .crop(200, 200) // 裁剪 200x200 的区域
  .resize(100) // 将宽度设为 100 像素,高度按比例调整
  .write('./output.jpg', (err) => {
    if (err) throw err;
    console.log('操作完成');
  });

以上代码展示了如何使用 gm 库来裁剪和缩放图片。通过这些简单的示例,你可以根据自己的需求灵活地使用这些功能。


希望这篇内容对你有所帮助!


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

可以 先要安装GraphicsMagick

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

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);  

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

顶一个

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

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

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

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

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

{ [Error: spawn ENOENT] code: ‘ENOENT’, errno: ‘ENOENT’, syscall: ‘spawn’ },出现这种错误。原来imagemagick是通过brew安装的,不是通过npm安装的,所有才会报错

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

var gm1=require(‘gm’).subClass({ imageMagick : true }); gm1(’/public/images/chat/abc.jpg’) .resize(240, 240,’!’) .noProfile() .write(’/public/images/chat/abc1.jpg’, function (err) { if (!err) console.log(‘done’); else { console.log(err); }

    });
 window下报错:![error.png](//static.cnodejs.org/Fi-uqcEgxURKrMRs7f-ZpLr-mp0F)
 { [Error: Command failed: ������ - /images

] code: 4, signal: null } 是什么原因啊?

为啥没有收藏功能哩

跟4楼 遇到同样的问题 ,有哪位大神解决了吗?

可以打水印吗?

各位,我想说,我解决了, imageMagick(path)改成 gm(path) 还有要按顺序安装imageMagick 和gm

可以看看另外一个图像处理库 lwip,另外我们对大部分NODE版本做了预编译,npm install 即可。 https://github.com/weixin/node-lwip

简单的缩放可以使用nginx的imagefilter插件,如果想做裁剪,可以使用某个人写的带crop offset的imagefilter插件

学习 自豪地采用 CNodeJS ionic

问题解决,win7下居然有自带的convert命令,和imageMagick命令冲突

做图片处理,难道没人用sharp这个包么?

安装了imageMagick和GraphicsMagick后,运行gmTest,提示“异常错误!可能不支持该格式的图片。”请问这是咋回事啊?

弱弱问下,使用的这个图片处理库能想ps那样裁剪png多余空白,并算出裁剪图片在原图的x,y坐标吗?我使用别的方法实现了,sharp和jimp(裁剪算法是网上找的)

可以用opencv4nodejs来做啊,

const cv = require(‘opencv4nodejs’); async function imgCut(){ let waldoMat = await cv.imreadAsync(./data/s9.jpg); let rows = waldoMat.rows; let cols = waldoMat.cols; let x0=19; let y0 = 17; let waldoRect = new cv.Rect(cols/2-x0,rows/2-y0,2x0,2y0); waldoMat = waldoMat.getRegion(waldoRect); cv.imshow(‘We’ve found Waldo!’, originalMat); cv.waitKey(); } imgCut(); 这是以坐标截取图片中间的部分,这个模块 完美支持对图片的各种姿势,还可以做模型匹配,对象跟踪,人脸识别,绝对是目前破解某东反爬措施的一大神器

对于标题为“Node.js 对图片进行裁切、缩放 (gm)”的帖子,我们可以提供一个简短且实用的回答来解决如何使用 gm(GraphicsMagick)模块来裁剪和缩放图片的问题。以下是一个简单的示例代码和解释:

示例代码

首先确保已经安装了gm库,可以通过运行以下命令安装:

npm install gm

然后你可以使用以下代码来实现图片的裁剪和缩放功能:

const gm = require('gm').subClass({imageMagick: true});
const path = require('path');

// 图片路径
const inputPath = path.join(__dirname, 'input.jpg');
const outputPath = path.join(__dirname, 'output.jpg');

// 裁剪和缩放图片
gm(inputPath)
  .resize(300, 200) // 缩放到300x200像素
  .crop(150, 100, 75, 50) // 从原始图像裁剪出150x100像素的区域,从(75, 50)位置开始
  .write(outputPath, function (err) {
    if (!err) {
      console.log('图片处理完成');
    } else {
      console.error(err);
    }
  });

代码解释

  • gm(inputPath):初始化需要处理的图片。
  • .resize(300, 200):将图片调整到指定大小(宽高分别为300和200像素)。如果只指定宽度或高度,另一个尺寸会按比例调整。
  • .crop(150, 100, 75, 50):裁剪图片。第一个参数和第二个参数是裁剪后图片的宽度和高度,后面两个参数是从原图中裁剪部分的起始坐标。
  • .write(outputPath, callback):保存处理后的图片到指定路径,并在完成时调用回调函数。

这样你就可以使用Node.js结合gm库轻松地对图片进行裁剪和缩放操作了。

回到顶部