node news harmony guide ecmascript docs community node.js png

node.js - harmony - node js news



Leyendo una imagen PNG en Node.js (4)

Éste realiza tanto la decodificación como la codificación PNG sin dependencias nativas:

pngjs - Codificador / decodificador PNG para Node.js sin dependencias nativas.

Un ejemplo para invertir los colores de un PNG:

var fs = require(''fs''), PNG = require(''pngjs'').PNG; fs.createReadStream(''in.png'') .pipe(new PNG()) .on(''parsed'', function() { for (var y = 0; y < this.height; y++) { for (var x = 0; x < this.width; x++) { var idx = (this.width * y + x) << 2; // invert color this.data[idx] = 255 - this.data[idx]; this.data[idx+1] = 255 - this.data[idx+1]; this.data[idx+2] = 255 - this.data[idx+2]; // and reduce opacity this.data[idx+3] = this.data[idx+3] >> 1; } } this.pack().pipe(fs.createWriteStream(''out.png'')); });

¿Hay una forma fácil en Node.js de leer un archivo PNG y obtener los píxeles de la imagen? Algo así como node-image , pero a la inversa :)

Revisé las bibliotecas enumeradas en https://github.com/joyent/node/wiki/modules#wiki-graphics , pero son simples envoltorios alrededor de las herramientas de línea de comandos que proporcionan recorte y cambio de tamaño o complejas herramientas de dibujo como node-canvas .



Estaba a punto de enojarme, pero encontré uno:

png.js : un decodificador PNG en JS para el elemento de lienzo o Node.js.

var PNG = require(''png-js''); var myimage = new PNG(''myimage.png''); var width = myimage.width; var height = myimage.height; myimage.decode(function (pixels) { //Pixels is a 1D array containing pixel data });

Por favor, tenga en cuenta que es JavaScript puro . Funciona tanto en el navegador <canvas> como en Node.JS.

Hay más propiedades aparte del width y la height , consulte esta fuente .


Yo creo que

var myimage = new PNG(''myimage.png'');

debiera ser

var myimage = new PNG.load(''myimage.png'');