「趣学前端」图片操作之“多媒体顶流”不羁的一生
前言
完成对 Node.js 的从了解到熟练的进阶这个 Flag 设立已久,久到去年就有它了。桂花飘香,秋意渐浓,隔年的 Flag 是时候拿出来实现了。出去踏青 or 在家码字,我决定选择后者。
至少对 Node.js 的探索,今年能有一个完美的叹号。
目标明确
图片作为多媒体“顶流”之一,本文主要解锁 node 对图片处理的各种操作,同时收获乐趣和技能。
随波逐流无归处,乘风破浪济沧海
常规操作
node-images
操作图片前先介绍一下使用到的图片处理库-node-images,它是 Node.js 轻量级跨平台图像编解码库。
功能特性
轻量级:无需安装任何图像处理库。
跨平台:Windows 下发布了编译好的.node 文件,下载就能用。
方便用:jQuery 风格的 API,简单可依赖。
安装
注意
如果使用过程中遇到报错:dyld: lazy symbol binding failed: Symbol not found,可以查看一下 node 版本,node 版本需要 16.14.0。(问题issues)
获取图片属性
.size([width[, height]]):获取或者设置图像宽高,如果 height 未指定,则根据当前宽高等比缩放;
.width([width]):获取或设置图像宽度,如果未指定值则获取图像宽度,否则设置图像宽度;
.height([height]):获取或设置图像高度,如果未指定值则获取图像高度,否则设置图像高度;
裁剪图片
裁剪图片主要用到三个 API
images(image[, x, y, width, height]):从另一个图像中复制区域来创建图像
.resize(width[, height]):设置图像宽高,如果 height 未指定,则根据当前宽高等比缩放, 默认采用 bicubic 算法;
.save(file[, type[, config]]):编码并保存当前图像到 file ,如果 type 未指定,则根据 file 自动判断文件类型,config 为图片设置,目前支持设置 JPG 图像质量
最终截取了原图片 compose-bg-2.jpeg 的底部并根据 resize 的值进行等比缩放生成新图片 compose-bg-region.jpg
合成图片
draw 为 node-images 提供的绘制 API,可以设置绘制到的图片上的位置
.draw(image, x, y):在当前图像( x , y )上绘制 image 图像
将图片 B 绘制到图片 A 上最终得到了合成图片,可以应用于某些加文案或者水印的场景。
旋转图片
.rotate(angle):将当前图像旋转,在参数中规定角度;
介绍页面没有展示 rotateAPI,单独源码中 test 文件中有这个 API,我试验了一下,好使;
“顶流”不一样的人间烟火
送你一颗小红心
选一张图片,作为最终合成的图片的背景图;
左半颗红心,使用 rotate 顺时针旋转 90 度,变成垂直状态;
左半颗红心,使用 draw 绘制到背景图上,绘制点为(100, 200);
右半颗红心,使用 rotate 顺时针旋转 90 度,变成垂直状态;
右半颗红心,使用 draw 绘制到背景图上,绘制点为(300, 200);
使用 save 保存最终的图片;
最终合成的图片
头像裁剪
头像裁剪,选择一张图片,设置裁剪后宽度和高度,使用 resize 可以重置图片尺寸;
宽度和高度可以只设置其中一项,另一项会取该项的值;
设置可剪裁的最大尺寸,因为图片裁剪不可以设置比原图片更大的尺寸,否则报错;
如果设置超过原尺寸 600*600 的尺寸,程序会抛出错误
总结
小技巧探索的差不多了,后面我会用 Node 开发实际项目,尽管目前业务上没有需要,但是有备无患。
康肃问曰:“汝亦知射乎?吾射不亦精乎?”翁曰:“无他,但手熟尔。”康肃忿然曰:“尔安敢轻吾射!”翁曰:“以我酌油知之。”乃取一葫芦置于地,以钱覆其口,徐以杓酌油沥之,自钱孔入,而钱不湿。因曰:“我亦无他,惟手熟尔。
版权声明: 本文为 InfoQ 作者【叶一一】的原创文章。
原文链接:【http://xie.infoq.cn/article/d3a2124da579cca414d1dd2a9】。文章转载请联系作者。
评论