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图片编辑和中文乱码


  • 2018-02-06 22:23:01

    HTML5 Canvas 的事件处理

    DOM是Web前端领域非常重要的组成部分,不仅在处理HTML元素时会用到DOM,图形编程也同样会用到。比如SVG绘图,各种图形都是以DOM节点的形式插入到页面中,这就意味着可以使用DOM方法对图形进行操作。比如有一个<path id=”p1″>元素,可以直接用jquery增加click事件$(‘#p1’).click(function(){…})”。然而这种DOM处理方法在HTML5的Canvas里不再适用,Canvas使用的是另外一套机制,无论在Canvas上绘制多少图形,Canvas都是一个整体,图形本身实际都是Canvas的一部分,不可单独获取,所以也就无法直接给某个图形增加JavaScript事件。

  • 2018-02-09 01:32:48

    PHP时间戳和日期相互转换

    在php中我们要把时间戳转换日期可以直接使用date函数来实现,如果要把日期转换成时间戳可以使用strtotime()函数实现,下面我来给大家举例说明。

  • 2018-02-09 02:57:46

    如何防止多次打开Activity?

    android:launchMode="singleTask" 加上这句,每次打开如果已有此activity,就会打开原来的实例,否则会创建新的activity​

  • 2018-02-17 18:51:26

    Context都没弄明白,还怎么做Android开发?

    作为Android开发者,不知道你有没有思考过这个问题,Activity可以new吗?Android的应用程序开发采用JAVA语言,Activity本质上也是一个对象,那上面的写法有什么问题呢?估计很多人说不清道不明。

  • 2018-02-17 23:33:20

    NestedScrollView+Recyclerview下滑卡顿解决方法

    大家在进行安卓开发用到NestedScrollView+Recyclerview的时候,经常出现的情况就是加载下滑的时候没有任何问题,很流畅,但是在下滑以后明显出现了卡顿的情况,小编根绝这个问题,给大家再来的解决方法,一起来学习下。

  • 2018-02-23 14:15:42

    mysql的取整函数

    ROUND(X) -- 表示将值 X 四舍五入为整数,无小数位 ROUND(X,D) -- 表示将值 X 四舍五入为小数点后 D 位的数值,D为小数点后小数位数。若要保留 X 值小数点左边的 D 位,可将 D 设为负值。

  • 2018-02-23 14:22:50

    mysql的yearweek 和 weekofyear函数

    例如 2010-3-14 ,礼拜天 SELECT YEARWEEK('2010-3-14') 返回 11 SELECT YEARWEEK('2010-3-14',1) 返回 10 其中第二个参数是 mode ,具体指的意思如下: Mode First day of week Range Week 1 is the first week … 0 Sunday 0-53 with a Sunday in this year 1 Monday 0-53 with more than 3 days this year 2 Sunday 1-53 with a Sunday in this year 3 Monday 1-53 with more than 3 days this year 4 Sunday 0-53 with more than 3 days this year 5 Monday 0-53 with a Monday in this year 6 Sunday 1-53 with more than 3 days this year 7 Monday 1-53 with a Monday in this year 2.