nodejs图片处理工具gm用法小结


Posted in NodeJs onDecember 12, 2018

在做H5应用中,有时候会涉及到一些图片加工处理的操作,nodejs有一个很好的后台图片处理module,就是这里说的gm。gm有官方文档,但感觉写得太抽象,反而看不懂了。这里把一些常见的用法写下,供大家参考。

安装   

首先要安装 GraphicsMagick或者ImageMagick,然后

npm install --save gm

GraphicsMagick和ImageMagick的区别

GraphicsMagick是从ImageMagick中分离出来的,推荐下载ImageMagick

加载GraphicsMagick(大小4.72 MB)

var gm = require('gm')

加载ImageMagick(大小23.8 MB)

var gm = require('gm').subClass({imageMagick: true})// 注意使用的区别

除了加载有区别,其他使用方式完全一样

用法说明

图片尺寸

gm('img.png')
.size(function (err, size) {
 if (!err)
  console.log(size.width > size.height ? 'wider' : 'taller than you');
});

图片伸缩

可以只依据宽、高或者同时将宽高都放缩。

gm("img.png").resize(width)//保持宽高比
gm("img.png").resize(null, height)//保持宽高比
gm("img.png").resize(width, height, '!')//参数'!'用于忽略宽高比

图片旋转

将图片旋转degrees,背景填充color。

gm("img.png").rotate(color, degrees)
gm("img.png").rotate('green', 45)

图片裁剪

从图片的(x, y)位置开始,裁剪出一个宽为width,高为height的图片来。

gm("img.png").crop(width, height, x, y)

图片拼接(mosaic)

gm()
 .in('-page', '+0+0')
 .in('bg.jpg')
 .in('-page', '+10+20') // location of smallIcon.jpg is x,y -> 10, 20
 .in('smallIcon.jpg')
 .mosaic()
 .write('tesOutput.jpg', function (err) {
  if (err) console.log(err);
 });

图片合成(compose)

gm()
.command("composite") 
.in("-gravity", "center")
.in(change_image_url)
.in(base_image_url)
.write( output_file, function (err) {
 if (!err) 
  console.log(' hooray! ');
 else
  console.log(err);
});

不太清楚图片拼接(mosaic)与合成(compose)有什么区别,gm提供了两条命令,对于简单的图片合成,好像都可以使用。

图片拼接(append)

gm中使用append也可以实现图片的拼接,与mosaic、compose不同的是,这里的拼接应该是不能覆盖的。缺省参数ltr表示拼接方向,布尔变量,true表示从左到右,false表示从上到下,默认false。

gm("img.png").append(img [, img, ltr])
gm("img.png").append("another.jpg", "third.gif")//从上到下拼接
gm("img.png").append("another.jpg", "third.gif", true)//从左到右拼接

图片注释

在图片的(x, y)位置绘制文字。

gm("img.png").drawText(10, 50, "from scratch")

创建图片

gm(200, 400, "#ddff99f3")
.drawText(10, 50, "from scratch")
.write("/path/to/brandNewImg.jpg", function (err) {
 // ...
});

总结

gm具有强大的图片处理功能,nodejs还是借助于gm工具来实现的图片处理,对于需要后台处理图片的情形,这个是挺有用的。

gm提供的各个函数其实可以复合使用,就是说,先读取(gm)图片后,可以先进行拼接(mosaic, compose, append),然后裁剪(crop),放缩(resize)到指定大小后,最后才保存(write)下来。

gm的官方文档感觉过于简陋,网上的关于nodejs gm用法的资料也不多,本文将一些基本的用法总结下来,学到到新的持续更新。

另外,欢迎大家总结nodejs gm资料!

附gm参考资料

node gm github

nodejs gm官方文档

stackoverflow : How to do composite with gm node.js?

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
nodejs win7下安装方法
May 24 NodeJs
nodejs中实现sleep功能实例
Mar 24 NodeJs
Nodejs如何搭建Web服务器
Mar 28 NodeJs
NodeJs的优势和适合开发的程序
Aug 14 NodeJs
NodeJS学习笔记之Module的简介
Mar 24 NodeJs
nodejs个人博客开发第六步 数据分页
Apr 12 NodeJs
NodeJS链接MySql数据库的操作方法
Jun 27 NodeJs
webpack打包nodejs项目的方法
Sep 26 NodeJs
nodejs搭建本地服务器并访问文件操作示例
May 11 NodeJs
nodejs实现日志读取、日志查找及日志刷新的方法分析
May 20 NodeJs
基于nodejs的微信JS-SDK简单应用实现
May 21 NodeJs
NodeJS http模块用法示例【创建web服务器/客户端】
Nov 05 NodeJs
详解nodejs解压版安装和配置(带有搭建前端项目脚手架)
Dec 06 #NodeJs
NodeJs实现简单的爬虫功能案例分析
Dec 05 #NodeJs
nodejs 使用 js 模块的方法实例详解
Dec 04 #NodeJs
使用koa-log4管理nodeJs日志笔记的使用方法
Nov 30 #NodeJs
nodejs 使用nodejs-websocket模块实现点对点实时通讯
Nov 28 #NodeJs
NodeJs 文件系统操作模块fs使用方法详解
Nov 26 #NodeJs
详解从NodeJS搭建中间层再谈前后端分离
Nov 13 #NodeJs
You might like
PHP 如何向 MySQL 发送数据
2006/10/09 PHP
用PHP和ACCESS写聊天室(六)
2006/10/09 PHP
PHP 文件上传后端处理实用技巧方法
2017/01/06 PHP
PHP正则替换函数preg_replace()报错:Notice Use of undefined constant的解决方法分析
2017/02/04 PHP
PHP设计模式之委托模式定义与用法简单示例
2018/08/13 PHP
jQuery标签替换函数replaceWith()的使用例子
2014/08/28 Javascript
Jquery解析Json格式数据过程代码
2014/10/17 Javascript
js+div实现文字滚动和图片切换效果代码
2015/08/27 Javascript
JavaScript的MVVM库Vue.js入门学习笔记
2016/05/03 Javascript
微信小程序 教程之注册程序
2016/10/17 Javascript
jQuery的Read()方法代替原生JS详解
2016/11/08 Javascript
基于Bootstrap模态对话框只加载一次 remote 数据的解决方法
2017/07/09 Javascript
Angular 4.0学习教程之架构详解
2017/09/12 Javascript
JavaScript实现重力下落与弹性效果的方法分析
2017/12/20 Javascript
node实现分片下载的示例代码
2018/10/17 Javascript
全面解析JavaScript Module模式
2020/07/24 Javascript
Python守护进程和脚本单例运行详解
2017/01/06 Python
python3实现UDP协议的服务器和客户端
2017/06/14 Python
使用Python实现一个栈判断括号是否平衡
2018/08/23 Python
Python3.6简单的操作Mysql数据库的三个实例
2018/10/17 Python
在PyCharm中三步完成PyPy解释器的配置的方法
2018/10/29 Python
Python 通过调用接口获取公交信息的实例
2018/12/17 Python
Django通过json格式收集主机信息
2020/05/29 Python
Django数据库迁移常见使用方法
2020/11/12 Python
CSS3 Columns分列式布局方法简介
2014/05/03 HTML / CSS
可持续木材、生态和铝制太阳镜:Proof Eyewear
2019/07/24 全球购物
Tomcat Mysql datasource数据源配置
2015/12/28 面试题
介绍一下木马病毒的种类
2015/07/26 面试题
医院深入开展党的群众路线教育实践活动实施方案
2014/08/27 职场文书
党的群众路线教育实践活动总结大会主持词
2014/10/30 职场文书
2014党的群众路线教育实践活动总结材料
2014/10/31 职场文书
个人年度总结报告
2015/03/09 职场文书
草房子读书笔记
2015/06/29 职场文书
幼儿教师远程研修感悟
2015/11/18 职场文书
SQL语句中JOIN的用法场景分析
2021/07/25 SQL Server
SpringCloud Function SpEL注入漏洞分析及环境搭建
2022/04/08 Java/Android