cam.capture(function loop(sucess) { if (!sucess) return; // Cria um buffer com a array RGB recebida var rgb = new Buffer(cam.toRGB()); var png = new Png(rgb, cam.width, cam.height, 'rgb'); // Cira uma nova imagens através do PNG var img = new Canvas.Image(); img.src = png.encodeSync(); // Dezenha esse PNG np canvas ctx.drawImage(img, 0, 0, options.width, options.height); // Escreve um texto no canvas ctx.font = '30px Impact'; ctx.fillStyle = colors[Math.floor(Math.random() * colors.length)]; ctx.fillText('Show me boobs!', 0, options.height, options.width); // Envia mais um frame para cada usuário conectado streams.forEach(function(gif) { gif.addFrame(ctx); }); // Faz mais uma captura cam.capture(loop); });
render: function(bgcolor, callback) { var w = this.maxX - this.minX + 1, h = this.maxY - this.minY + 1, buffer = new Buffer(w * h * 3); for (var y = this.minY; y <= this.maxY; y++) { for (var x = this.minX; x <= this.maxX; x++) { var c = (typeof(this.data[y][x]) == "undefined") ? bgcolor: this.colors[this.data[y][x]], offset = (y * w + x) * 3; buffer[offset] = c.r; buffer[offset + 1] = c.g; buffer[offset + 2] = c.b; } } var png = new Png(buffer, w, h, 'rgb'); png.encode(function(data, err) { if (err) { console.error("Error: " + err.toString()); } else { callback(data.toString('binary')); } }); }
times(6, cam.capture.bind(cam), function () { var rgb = cam.toRGB(); var img = new png.Png(Buffer(rgb), cam.width, cam.height, "rgb"); img.encode(function (buf) { fs.writeFileSync("result.png", buf); }); cam.stop(); });
times(6, cam.capture.bind(cam), function () { var rgb = cam.toRGB(); var img = new png.Png(Buffer(rgb), cam.width, cam.height, "rgb"); img.encode(function (buf) { callback(null, buf); }); cam.stop(); });
var saveRectNow = function(rect, path) { var png = new PNG.Png(rect.fb, rect.width, rect.height, 'bgra'); // rgba bgra setRectAlpha(rect); var data = png.encodeSync(); fs.writeFileSync(path, data, 'binary'); if (DEBUG) { console.log('saved ' + rect.width + 'x' + rect.height + ' to ' + path); } };
var writePng = function (cam, filename) { console.log("write " + filename + " (" + cam.width + "," + cam.height + ")"); var rgb = cam.toRGB(); var img = new png.Png(Buffer(rgb), cam.width, cam.height, "rgb"); img.encode(function (buf) { fs.writeFileSync(filename, buf); }); };
var saveRect = function(rect, path, cb) { var png = new PNG.Png(rect.fb, rect.width, rect.height, 'bgra'); // rgba bgra setRectAlpha(rect); png.encode(function(data) { fs.writeFile(path, data, 'binary', function(err) { if (cb) { cb(err); } if (DEBUG && !err) { console.log('saved ' + rect.width + 'x' + rect.height + ' to ' + path); } }); }); };
this.context.on('depth', function(buf) { if(depth_flag == true){ depth_flag = false; // each depth pixel in buf has 2 bytes, 640 x 480, 11 bit resolution var png = new Png(buf, 640, 480, 'gray', 16); var png_image = png.encodeSync(); var filename = '/Users/troytherrien/Documents/cowboy-test/depth/' + timestamp + '.png'; //fs.writeFileSync(filename, png_image.toString('binary'), 'binary'); fs.writeFile(filename, png_image.toString('binary'), 'binary', function (err) { if (err) throw err; //console.log('It\'s saved!'); self.emit("depth", filename); }); } });
this.context.on('video', function(buf) { if(rgb_flag == true){ rgb_flag = false; // each rgb pixel in buf has 2 bytes, 640 x 480, 3 channels var png = new Png(buf, 640, 480, 'rgb'); var png_image = png.encodeSync(); var filename = '/Users/troytherrien/Documents/cowboy-test/rgb/' + timestamp + '.png'; //fs.writeFileSync(filename, png_image.toString('binary'), 'binary'); fs.writeFile(filename, png_image.toString('binary'), 'binary', function (err) { if (err) throw err; //console.log('It\'s saved!'); self.emit("rgb", filename); }); } });
function generatePNGImageFrom1DArray(WIDTH, HEIGHT, array, imageName){ var fs = require('fs'); var sys = require('sys'); var Png = require('png').Png; var Buffer = require('buffer').Buffer; var rgb = new Buffer(WIDTH*HEIGHT*3); for (var i=0; i<HEIGHT; i++) { for (var j=0; j<WIDTH; j++) { rgb[i*WIDTH*3 + j*3 + 0] = array[i*WIDTH*3 + j*3 + 0]; rgb[i*WIDTH*3 + j*3 + 1] = array[i*WIDTH*3 + j*3 + 1]; rgb[i*WIDTH*3 + j*3 + 2] = array[i*WIDTH*3 + j*3 + 2]; } } var png = new Png(rgb, WIDTH, HEIGHT, 'rgb'); fs.writeFileSync(imageName, png.encodeSync().toString('binary'), 'binary'); }
var video = new Video.Video(fb32, function (minx, miny, maxx, maxy) { frame++; if (screenshotRequest) { var width = maxx - minx; var height = maxy - miny; var buf = new Buffer(width * height * 3); var addr = 0; for (var y = miny; y < maxy; ++y) { for (var x = minx; x < maxx; ++x) { var col = fb32[1280 * y + x]; buf[addr++] = col & 0xff; buf[addr++] = (col >>> 8) & 0xff; buf[addr++] = (col >>> 16) & 0xff; } } var png = new Png(buf, width, height); var pngImage = png.encodeSync(); console.log("Saving " + width + "x" + height + " screenshot to " + screenshotRequest); fs.writeFileSync(screenshotRequest, pngImage.toString('binary'), 'binary'); screenshotRequest = null; } });
var fs = require('fs'); var sys = require('sys'); var Png = require('png').Png; var Buffer = require('buffer').Buffer; var x = "\x00\x00\x00\x00"; var o = "\xff\x00\x00\x00"; var img = x + o + o + o + o + o + x + o + o + o + o + o + x + o + o + o + o + o + x + o + o + o + o + o + x; var rgba = new Buffer(100); rgba.write(img, 'binary'); var png = new Png(rgba, 5, 5, 'rgba'); var png_image = png.encodeSync(); fs.writeFileSync('./png-5x5.png', png_image.toString('binary'), 'binary');
var fs = require('fs'); var sys = require('sys'); var Png = require('png').Png; var Buffer = require('buffer').Buffer; // the rgba-terminal.dat file is 1152000 bytes long. var rgba = fs.readFileSync('./rgba-terminal.dat'); var png = new Png(rgba, 720, 400, 'rgba'); png.encode(function (data, error) { if (error) { console.log('Error: ' + error.toString()); process.exit(1); } fs.writeFileSync('./png-async.png', data, 'binary'); });
//prepare to transfer all the data var cans = [] var ctxs = [] for (var j = 0; j < pics.length; j++) { var can = new Canvas(640, 480) var ctx = can.getContext('2d') cans.push(can) ctxs.push(ctx) } //try to convert using node-png timer.start() for (var j = 0; j < pics.length; j++) { var p = pics[j] var png2 = new Png(p, 640, 480, 'rgb') var png_image = png2.encodeSync(); fs.writeFileSync('../pics/png_node' + j + '.png', png_image.toString('binary'), 'binary'); } console.log("converting with node-png", timer.stop()) timer.start() for (var j = 0; j < pics.length; j++) { var p = pics[j] var png2 = new Png(p, 640, 480, 'rgb') var png_image = png2.encode(function (data, error) { if (error) { console.log('Error: ' + error.toString()); process.exit(1); } //fs.writeFileSync('./png-async.png', data.toString('binary'), 'binary');
// Show a Mandelbrot set image. function show_image(req, res) { // Extract parameters from the request var params = Url.parse(req.url, true); // Check parameters and determine final values var re_center = Number(params.query.re) || RE_CENTER; if (re_center == Number.NaN) re_center = RE_CENTER; var im_center = Number(params.query.im) || IM_CENTER; if (im_center == Number.NaN) im_center = IM_CENTER; var size = Number(params.query.size) || SIZE; if (size == Number.NaN) size = SIZE; if (size > MAX_SIZE) size = MAX_SIZE; if (size < 0) size = SIZE; var ppu = Number(params.query.ppu) || PXPERUNIT; if (ppu == Number.NaN) ppu = PXPERUNIT; if (ppu < 0) ppu = PXPERUNIT; var max = Number(params.query.max) || MAX_ITER; if (max == Number.NaN) max = MAX_ITER; if (max < 0) max = MAX_ITER; var opt = Number(params.query.opt) || OPT; if (opt == Number.NaN) opt = OPT; if (opt < 0) opt = OPT; if (opt > MAX_OPT) opt = OPT; var aa = Number(params.query.aa) || AA; if (aa == Number.NaN) aa = AA; if (aa < 0) aa = AA; if (aa > MAX_AA) aa = MAX_AA; // Render a Mandelbrot set into a result array switch (aa) { case 0: var rendersize = size; var renderppu = ppu; break; case 1: case 2: var rendersize = size * 3; var renderppu = ppu * 3; break; case 3: case 4: var rendersize = size * 5; var renderppu = ppu * 5; } var totaltime = 0; var elapsed = 0; Timer.start(); var result = Mandelbrot.render(rendersize, re_center, im_center, renderppu, max, opt); elapsed = Timer.stop(); totaltime += elapsed; process.stdout.write("Mandelbrot set rendering time: " + elapsed + "ms\n"); Timer.start(); // Create a colormap. var map = Colormap.colormap(COLORS); // Create an image buffer. var image = new Buffer(rendersize * rendersize * 3); // Compute the color normalization factor. var f = COLORS/(max + 1); // Fill the image buffer with the result from the Mandelbrot set, mapped to the colormap. var pos = 0; var color = []; for (i = 0; i < rendersize * rendersize; i++) { color = map[Math.floor(result[i] * f)]; image[pos++] = color[0]; image[pos++] = color[1]; image[pos++] = color[2]; } elapsed = Timer.stop(); totaltime += elapsed; process.stdout.write("Color mapping time: " + elapsed + "ms\n"); Timer.start(); // Resize the image using a Gaussian filter to provide high quality anti-aliasing. switch (aa) { case 0: clean_image = image; break; case 1: clean_image = Resize.resizento1(image, rendersize, 3, Resize.gauss(3, 0.5)); break; case 2: clean_image = Resize.resizento1(image, rendersize, 3, Resize.mitchell(3, 0.4, 0.3)); break; case 3: clean_image = Resize.resizento1(image, rendersize, 5, Resize.gauss(5, 0.5)); break; case 4: clean_image = Resize.resizento1(image, rendersize, 5, Resize.mitchell(5, 0.4, 0.3)); break; } elapsed = Timer.stop(); totaltime += elapsed; process.stdout.write("Image resizing/filtering time: " + elapsed + "ms\n"); Timer.start(); // Convert the image into PNG format. var png_image = new Png(clean_image, size, size, 'rgb'); var png_file = png_image.encodeSync(); elapsed = Timer.stop(); totaltime += elapsed; process.stdout.write("PNG encoding time: " + elapsed + "ms\n"); // Return the image to the browser. res.writeHead(200, { "Content-Type": "image/png" }); res.end(png_file.toString('binary'), 'binary'); }