nodejs gm drawText使用(中文、字体、大小及颜色)

2019-02-12 16:20:47

node党悲催的发现,图片处理工具只有一个gm可以选。gm无非是调用了GraphicsMagick/ImageMagick而已,性能不敢恭维。但是有很多后台生成图片的场景,没办法,只能硬着头皮上了。


前文 ( nodejs图片处理工具gm用法 ) 总结了nodejs gm的基本操作,本篇细说给图片添加文字的接口drawText。


基本用法

gm("test.png")

.drawText(x, y, text [, gravity])

1

2

如果没有gravity参数,那么就将text绘制到图片中的(x,y)坐标处。 

如果带有gravity参数,从(x,y)坐标开始到右下角构成的图片范围内,依据gravity含义绘制文字。 

gravity选项如下:


NorthWest, North, NorthEast, West, Center,

East, SouthWest, South, or SouthEast

1

2

用法示例:


值得注意的是,在带有gravity的情形下,(x,y)坐标能起到对位置的调整作用,而且还可以取负值。


gm('test.png')


.drawText(100, 100, 'Hello')            //绘制到(100,100)位置处


.drawText(0, 0, 'Hello', 'Center'); //绘制到图片正中间


.drawText(0, 10, 'Hello', 'Center');    //图片上面裁除10px,剩下部分的中心。等同于原图中心往下5px


.drawText(0, -10, 'Hello', 'Center');   //同上,等同于原图中心往上5px


.drawText(0, 0, 'Hello', 'NorthEast');  //原图右上角

1

2

3

4

5

6

7

8

9

10

11

中文

gm不能直接绘制中文,需要在绘制的时候引入相应的字库。


gm('test.png')

.font('./fonts/heiti.ttf')      //引入预先下载的黑体字库

.drawText(10, 10, '这是一个测试')

1

2

3

字体大小

可以通过fontSize修改字号。


gm('test.png')

.fontSize(36)           //字体大小36

.drawText(10, 10, '这是一个测试')

1

2

3

字体颜色

通过fill修改填充颜色。


gm('test.png')

.fill('#ffffff')        //设置白色

.drawText(10, 10, '这是一个测试')

1

2

3

字体、大小和颜色,有了这些,基本上就可以自由的在图片上绘制了。


参考

官方文档:GraphicsMagick for node.js


How do I change the color of text I’m drawing with node graphicsmagick?


Nodejs图片编辑和中文乱码


  • 2017-08-09 15:14:52

    如何写好.babelrc?Babel的presets和plugins配置解析

    官网是这么说的,翻译一下就是下一代JavaScript 语法的编译器。 作为前端开发,由于浏览器的版本和兼容性问题,很多JavaScript的新的方法都不能使用,等到可以大胆使用的时候,可能已经过去了好几年。Babel就因此而生,它可以让你放心使用大部分的JavaScript的新的标准的方法,然后编译成兼容绝大多数的主流浏览器的代码。

  • 2017-08-15 17:44:21

    glob 介绍

    glob 最早是出现在类Unix系统的命令行中, 是用来匹配文件路径的。比如,lib/**/*.js 匹配 lib 目录下所有的 js 文件。 除了在命令行中,我们在程序中也会有匹配文件路径的需求。于是,很多编程语言有了对 glob 的实现 ,如 Python 中的 glob 模块; php 中的 glob 方法。

  • 2017-08-16 08:45:41

    nodejs中流(stream)的理解

    这种方式是把文件内容全部读入内存,然后再写入文件,对于小型的文本文件,这没有多大问题,比如grunt-file-copy就是这样实现的。但是对于体积较大的二进制文件,比如音频、视频文件,动辄几个GB大小,如果使用这种方法,很容易使内存“爆仓”。理想的方法应该是读一部分,写一部分,不管文件有多大,只要时间允许,总会处理完成,这里就需要用到流的概念。

  • 2017-08-17 17:58:48

    /usr、/home、/bin、/dev、/var、/etc中主要存放什么文件

    /usr 最庞大的目录,要用到的应用程序和文件几乎都在这个目录。其中包含: /usr/X11R6 存放X window的目录 /usr/bin 众多的应用程序 /usr/sbin 超级用户的一些管理程序 /usr/doc linux文档 /usr/include linux下开发和编译应用程序所需要的头文件 /usr/lib 常用的动态链接库和软件包的配置文件 /usr/man 帮助文档 /usr/src 源代码,linux内核的源代码就放在/usr/src/linux里 /usr/local/bin 本地增加的命令 /usr/local/lib 本地增加的库

  • 2017-08-17 19:26:00

    mysql安装目录、配置文件存放位置

    linux系统下,如何知道mysql使用的配置文件到底是哪个呢?linux自带的mysql的安装目录又是什么呢?数据存放在什么目录下?