本文概述
图像处理是用Javascript处理的繁重任务, 因此, 如果要在操作和图像处理中提供顺畅的使用体验, 则可以在node.js可用的其他图像处理库中选择lwip(例如jimp, 图像处理模块使用纯JavaScript编写), 因为lwip使用C ++编写的本机模块, 这将使图像处理变得快速而流畅。
lwip模块提供全面, 快速和简单的图像处理和操作功能。没有外部运行时依赖项, 这意味着你不必在系统上安装其他任何东西。
支持的格式
解码(读取):
- JPEG, 1和3通道(灰度和RGB)。
- PNG, 支持透明度。
- GIF, 支持透明度。可以读取动画GIF, 但是仅会检索第一帧。
编码(写):
- JPEG, 3通道(RGB)。
- PNG(无损), 3通道(RGB)或4通道(RGBA)。
- GIF(无动画)
在本文中, 你将在几分钟内学习如何轻松地在node.js项目中安装和使用lwip模块。
1.全局安装node-gyp
你需要node-gyp才能使用lwip模块。在执行以下命令的node命令提示符中, 继续将node-gyp作为全局变量进行安装:
npm install -g node-gyp
node-gyp是用Node.js编写的跨平台命令行工具, 用于为Node.js编译本机附加模块。它捆绑了Chromium团队使用的gyp项目, 免除了处理构建平台中各种差异的痛苦。
2.安装所需的工具
要使用lwip, 我们需要系统上可用的以下工具:
- Visual C ++构建环境。
- node-gyp不支持Python v2.7.x和v3.x版本。
选项1:自动安装
在节点命令提示符(以管理员身份运行)中执行以下命令:
npm install --global --production windows-build-tools
该模块将安装python 2.7和Visual Studio C ++编译器。安装可能需要一段时间, 但是会使你的安装过程变得容易。
选项2:手动安装
转到python官方网站上的下载区域, 然后下载最新的2.7.x安装程序, 并像使用任何安装程序一样继续进行安装。不要忘记在设置中的选项的环境变量中添加python。
如果你有另一个python版本(即v3), 则可以通过设置’–python’变量来标识node-gyp使用哪个Python版本:
node-gyp --python /path/to/python2.7
如果通过npm调用node-gyp并且你安装了多个版本的Python, 则可以将npm的’python’配置键设置为适当的值:
npm config set python /path/to/executable/python2.7
现在你有了python, 我们只需要Visual C ++ Build Environment。可以通过此处的Visual C ++ Build环境安装程序进行安装, 也可以通过Visual Studio 2015的安装进行安装(或修改现有安装), 然后在安装过程中选择Visual C ++的通用工具。这也适用于免费的Community和Express for Desktop版本。
Visual C ++ Build环境的安装完成后, 在node命令提示符下执行以下命令, 以在配置中将Visual Studio版本设置为2015:
npm config set msvs_version 2015
你已经准备好出发了。如果上述步骤对你不起作用, 请访问Microsoft的Windows Node.js指南以获取其他提示。
3.在项目中安装lwip
现在, 我们拥有编译lwip的本机模块所需的所有工具, 我们可以开始使用它了, 因此最后在Node命令提示符下执行以下命令, 继续安装模块:
npm install lwip
该模块的下载将开始, 并且将立即开始构建过程(可能需要一段时间)。为了测试我们是否正确完成了所有操作, 我们将操作以下图像(image.jpg):
还有一个在node.js(index.js)中使用lwip对其进行操作的脚本:
var lwip = require('lwip');
lwip.open('image.jpg', function(err, image){
// check err...
// define a batch of manipulations and save to disk as JPEG:
image.batch()
.scale(0.75) // scale to 75%
.rotate(45, 'white') // rotate 45degs clockwise (white fill)
.writeFile('output.jpg', function(err){
if(err){
console.log(err);
}
});
});
将代码保存在js文件(在本例中为index.js)中, 并使用以下命令测试脚本:
node index.js
先前的脚本应使用以下图像创建图像(ouput.jpg):
所有操作都是异步的, 并且处理在Nodeuv的libuv管理的线程池中进行。该线程池与用于处理HTTP请求的事件循环是分开的, 因此使用lwip不会显着影响Web应用程序对HTTP请求的处理。但是, 线程池与其他线程本机模块(例如提供数据库和文件系统IO的模块)共享。
默认线程池大小4将适合大多数应用程序。但是, 如果你的应用程序定期并发处理许多图像, 并且希望充分利用多核系统或防止繁重的图像处理工作延迟数据库或文件系统IO, 则可能需要通过设置UV_THREADPOOL_SIZE环境来增加线程池的大小。 NodeJS进程的变量, 例如:
UV_THREADPOOL_SIZE=8 node index.js
4.使用lwip
所有操作都在图像对象上完成。可以通过以下方式获得图像对象:
- 使用open方法打开现有的图像文件或缓冲区。
- 使用create方法创建一个新的图像对象。
- 使用image.clone方法克隆现有的图像对象。
- 使用image.extract方法从现有图像对象中提取子图像。
在这里, 你将找到几个使用lwip可以完成的怪异任务的示例:
创建图像
当你要将图像作为画布(其中将要渲染或修改更多图像)时, 图像的创建会很方便。第三个参数提供画布的颜色, 默认为透明。
var lwip = require('lwip');
lwip.create(500, 500, 'yellow', function(err, image){
image.writeFile('myimage.jpg', function(err){
if(err){
console.log(err);
}
});
});
上一个代码段将创建一个具有黄色背景的500x500px的图像(正方形)。
将图像导出到base64
你可以检索图像的base64内容, 将缓冲区转换为字符串。
var lwip = require('lwip');
lwip.create(300, 300, 'yellow', function(err, image){
image.toBuffer('png', function(err, buffer) {
var base64data = buffer.toString('base64');
var finalBase64String = 'data:image/png;base64, ' + base64data;
console.log(finalBase64String);
});
});
请注意, 缓冲区将提供纯base64数据, 因此, 如果要提供可以在浏览器中直接显示的base64字符串, 则需要添加”内联格式”。
操纵base64图像
你可以直接在lwip中操作base64格式的图像, 而无需创建静态文件。而是创建一个新的Buffer实例, 上面带有Base64数据(请记住要删除不必要的数据, 该缓冲区期望纯base64内容或该文件将被破坏)。
var lwip = require('lwip');
var base64String = "data:image/jpeg;base64, qweqwe.......";
var encondedImageBuffer = new Buffer(base64String.replace(/^data:image\/(png|gif|jpeg);base64, /, ''), 'base64');
lwip.open(encondedImageBuffer, 'jpg', function(err, image){
// check err...
// define a batch of manipulations and save to disk as JPEG:
image.batch().writeFile('myimage.jpg', function(err){
if(err){
console.log(err);
}
});
});
你可以在官方存储库或自述文件的使用区域中阅读更多示例和该库的文档。
玩得开心 !
评论前必须登录!
注册