Giter Site home page Giter Site logo

imagebuffer's Introduction

update

A note on performance. A wrapper/library like this will hamper the performance when you are doing millions of operations; to the point that it may even be worse than simple (unrolled) Uint8ClampedArray loop. Just because this library performs better in certain microbenchmarks doesn't mean much... Always benchmark your own app!

#about

Fast per-pixel image manipulation with Canvas / WebGL.

Instead of manipulating the 8 bit array (separate R, G, B, A components), we modify a Int32Array which is backed by the ImageData's Uint8ClampedArray buffer. If unsupported, we fall back to 8bit modification. The concept is discussed here:
https://hacks.mozilla.org/2011/12/faster-canvas-pixel-manipulation-with-typed-arrays/

The code looks like this:

//create an empty ImageData
var imageData = ctx.createImageData(0, 0, width, height);

//make a new ImageBuffer for direct manipulation of that ImageData
var buffer = new ImageBuffer(imageData);

//do your per-piel operations with setPixel and getPixel
//or act directly on buffer.uint8
for (var i=0; i < width * height; i++) {
	var r = 0,
		g = ( i/(width*height) ) * 255, //simple linear gradient
		b = 0,
		a = 0;

	// set the pixel, using original alpha
	buffer.setPixel(i, r, g, b, a);
}

//place the data onto the canvas
ctx.putImageData(imageData, 0, 0);

The setPixel and getPixel methods will handle endianness for you, when using the more performant 32-bit approach. ImageBuffer also includes a few other useful functions, like creating a new Image object from an ImageData source.

docs & demos

using with NodeJS

Install:

npm install imagebuffer

Require it in your client-side code:

var ImageBuffer = require('imagebuffer');

using without NodeJS

You can grab the minified UMD version inside the build folder.

using with WebGL

You need to wrap the Uint8ClampedArray as a Uint8Array, like so:

var type = gl.UNSIGNED_BYTE;
var data = new Uint8Array(buffer.uint8);

building

To browserify, minify, and generate docs, run:

npm run-script build

imagebuffer's People

Contributors

mattdesl avatar

Stargazers

Icemic avatar wandergis avatar DK Dhilip avatar Jon Randy avatar  avatar Angus H. avatar Dren Kajmakchi avatar Mike Tobia avatar Michael Anthony avatar alt3 avatar Cory Armbrecht avatar 墨神 avatar Jules Kuehn avatar Ulric Wilfred avatar Nikos M. avatar Isaac A. Dettman avatar Brett Camper avatar Thomas Efer avatar JT5D avatar finscn avatar Mark Steve Samson avatar Dan Peddle avatar Marshall Jones avatar Bret Little avatar Yuki Iwanaga avatar Matthew Mckenzie avatar  avatar Jonas Hermsmeier avatar Jake Bixby avatar Hiroaki Yamane avatar Yuya Saito avatar Chris Witko avatar David Hollifield avatar Brice avatar Evan You avatar  avatar  avatar mparaiso avatar Andreas avatar

Watchers

finscn avatar James Cloos avatar  avatar Michael Anthony avatar  avatar

imagebuffer's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.