nodejs图片处理工具gm
工具下载
GraphicsMagick和ImageMagick
- 博主一开始安装gm的时候,也是被其他攻略误导过,大部分帖子都会让你安装GraphicsMagick和ImageMagick,但是不清楚到底是安装哪一个还是两个都安装。
- 在这里博主推荐直接安装ImageMagick就行了,因为GraphicsMagick这里有个坑,不建议下载,下面会说到这个问题。
下载地址(windows版本)
GraphicsMagick(不建议下载)和ImageMagick
(GraphicsMagick)直接点击红圈位置的字体便可以下载
(ImageMagick)拉到最下面,博主下载的是红圈的这个版本
ImageMagick安装选项
红圈位置一定要点上,不然有可能会出现{code: 4, signal: null}的错误
查看ImageMagick版本号
运行命令行win+R 输入cmd回车
- 执行指令convert -version
- 返回下图版本号就是安装成功
注意事项:有些电脑安装完成后,执行该指令会返回无法驱动器规格或者没有东西反馈,请重启电脑。
模块添加
npm install gm
添加水印
使用gm主要还是用来添加水印,因为nodejs本身自带的image模块能满足大部分需求,但是无法添加水印,所以下面就使用gm添加水印的方法。
载入gm模块
const gm = require('gm').subClass({imageMagick: true})
指定图片添加文字
gm(./uploads/pic/test.jpg) //指定添加水印的图片
.stroke("white") //字体外围颜色
.fill("white") //字体内围颜色(不设置默认为黑色)
.drawText(50,50,"China")
.write(./uploads/pic/watermark.jpg, function (err) {
console.log(err)
if (!err) console.log('ok');
else console.log(err);
});
添加中文字体
需要加入字库ttf
微软雅黑.ttf(可上网下载其他字库)
密码:ani2
.font("./ttf/msyh.ttf",60) //字库所在文件夹和字体大小
gm(./uploads/pic/test.jpg) //指定添加水印的图片
.stroke("white") //字体外围颜色
.fill("white") //字体内围颜色(不设置默认为黑色)
.font("./ttf/msyh.ttf",60) //字库所在文件夹和字体大小
.drawText(50,50,"中文China")
.write(./uploads/pic/watermark.jpg, function (err) {
console.log(err)
if (!err) console.log('ok');
else console.log(err);
});
添加日期水印
下载moment模块
npm install moment
加载模块
const moment = require('moment');
调用
var datetime = moment().format("YYYY-MM-DD HH:mm:ss");
gm(./uploads/pic/test.jpg) //指定添加水印的图片
.stroke("white") //字体外围颜色
.fill("white") //字体内围颜色(不设置默认为黑色)
.font("./ttf/msyh.ttf",60) //字库所在文件夹和字体大小
.drawText(50,50,datetime)
.write(./uploads/pic/watermark.jpg, function (err) {
console.log(err)
if (!err) console.log('ok');
else console.log(err);
});
中文乱码
自身体验
重点来了,博主也是被这个地方坑了很久,卡了一整天的时间。虽然网上有一些解决方案但是没有写到重点上,导致我在解决这个问题上卡了很久,一直出现中文乱码。
解决方案
这个问题很好解决,先说说博主是怎么遇到的
- 博主也是根据网上教程一步步安装gm,问题也是在这里正如前面所说,有些教程没有区分GraphicsMagick和ImageMagick,导致博主安装过程中两个一起安装。
- 那么一起安装会出现什么问题,我自己的电脑出现的问题就是,在调用gm过程中,ImageMagick的调用完全被GraphicsMagick占据了,导致nodejs调用gm模块过程,无论你如何调用都是GraphicsMagick的方式。
- 而实际测试中可以发现GraphicsMagick并不具备中文水印的功能,所以中文显示都是乱码的情况,那是因为GraphicsMagick是从ImageMagick分割独立出来的一小部分,可能并不具备中文功能。
- 代码上能解决的方案就是去指定gm的路径,将gm的调用指定到ImageMagick,而不是GraphicsMagick,网上有些大神貌似已经有用过这个操作。
最直接的解决方案 - 从根本上解决问题,就是下载工具过程中,只下载ImageMagick
- 如果出现这种情况的小伙伴建议卸载GraphicsMagick和ImageMagick,再重新安装ImageMagick并重启电脑
最后
参考的文章我会贴在下面
很感谢其他博主的文章让我能顺利使用gm工具
[vcxiaohan2]node图片处理工具gm的使用:图片水印、图片验证码、图片裁剪示例
[peachesTao]解决NodeJs gm模块报错{ [Error: Command failed: aaЧaaaa ] code: 4, signal: null }
[无名大盗]nodejs图片处理工具gm用法