Exemplo n.º 1
0
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);
});
Exemplo n.º 2
0
    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'));
        }
      });
    }
Exemplo n.º 3
0
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();
});
Exemplo n.º 4
0
 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();
 });
Exemplo n.º 5
0
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);
    }
};
Exemplo n.º 6
0
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);
    });
};
Exemplo n.º 7
0
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);
            }
        });
    });
};
Exemplo n.º 8
0
	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);
			});
		}
	});
Exemplo n.º 9
0
	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);
			});
		}
	});
Exemplo n.º 10
0
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');	
}
Exemplo n.º 11
0
 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;
     }
 });
Exemplo n.º 12
0
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');

Exemplo n.º 13
0
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');
});

Exemplo n.º 14
0
//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');
}