phantomjs-pixel-server v0.1.0
phantomjs-pixel-server 
PhantomJS server that converts canvas actions into pixels
This is part of the gifsockets project.
Getting Started
Install the module with: npm install -g phantomjs-pixel-server
Start a server and get some pixels:
bin/phantomjs-pixel-server &
# PhantomJS server is running at http://127.0.0.1:9090/
curl http://127.0.0.1:9090/ -X POST --data \
'{"width":10,"height":10,"js":{"params":["canvas","cb"], '\
'"body":"var context = canvas.getContext(\"2d\"); '\
'context.fillStyle = \"#BADA55\"; context.fillRect(0, 0, 10, 10); cb();"}}'
# [186,218,85,255,186,218, ..., 255]With request, that would look like:
// We use JSON as our body and must serialize it in this maner
var arg = JSON.stringify({
width: 10,
height: 10,
js: {
params: ["canvas", "cb"],
body: [
'var context = canvas.getContext(\'2d\');'
'context.fillStyle = \'#BADA55\';',
'context.fillRect(0, 0, 10, 10);',
'cb();'
].join('')
}
});
var encodedArg = encodeURIComponent(arg);
// Request to our server
request({
url: 'http://localhost:9090/',
method: 'POST',
headers: {
// PhantomJS looks for Proper-Case headers, request is lower-case
// This means you *must* supply this header
'Content-Length': encodedArg.length
},
body: encodedArg,
}, function handlePhantomResponse (err, res, body) {
// body is "[186,218,85,255,186,218, ..., 255]"
});Documentation
CLI
The CLI command for phantomjs-pixel-server is a node wrapper which invokes a PhantomJS script. The script path is resolved by node's require function.
// Resolve locally installed server path
// '/home/todd/github/phantomjs-pixel-server/lib/phantomjs-pixel-server.js'
require.resolve('phantomjs-pixel-server');Inside the server, we use commander to accept different parameters for the server. Currently, we only support port.
$ phantomjs-pixel-server --help
Usage: phantomjs-pixel-server.js [options]
Options:
-h, --help output usage information
-V, --version output the version number
-p, --port <port> Port to run the server onHTTP interface
phantomjs-pixel-server will reply with 200s to any non-POST request (e.g. GET). This is a nice way to know when the server has started.
curl http://127.0.0.1:9090/
# IT'S ALIVE!For POST requests, we expect a JSON body that has been run through escapeURIComponent (see Getting Started for example). The request can have the following parameters
- width
Number- Width of canvas and output image - height
Number- Height of canvas and output image - js
Object- Container for commands to run against acanvasinstance- This can be prepared by passing a function to function-to-string
- The function itself should have a signature of
function (canvas, cb) {} - params
String[]- Array of parameter names for a function- The first parameter will be a
canvasinstance with the providedwidthandheight
- The first parameter will be a
- body
String- Body of the function to execute- This must callback when it is completed (second parameter)
- It is expected that
js.bodywill write out the content you want to the canvas
- responseType
String- Optional flag to set response type.- By default, the response will be an
rgbaarray of pixels.- For example,
[0, 1, 2, 3, 4, 5, 6, 7]is 2 pixels withr: 0, g: 1, b: 2, a: 3andr: 4, g: 5, b: 6, a: 7
- For example,
- If
responseTypeis'string', the response will be a string where each character represents a pixel value- For example,
abcdis[97, 98, 99, 100] - These values can be extracted via charCodeAt. Another example is in the tests.
- This is practical for reducing padding and using a more efficient parsing technique.
- For example,
- By default, the response will be an
Donating
Support this project and others by twolfson via gittip.
Contributing
In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint via grunt and test via npm test.
Unlicense
As of Nov 15 2013, Todd Wolfson has released this repository and its contents to the public domain.
It has been released under the UNLICENSE.
12 years ago
