Browse Source

Added data uri support. Closes #49

easy as pie now that we have .src=Buffer support
v1.x
Tj Holowaychuk 14 years ago
parent
commit
f72f8072ab
  1. 32
      lib/image.js
  2. 6
      src/Image.cc
  3. 4
      src/Image.h

32
lib/image.js

@ -12,9 +12,41 @@
var Canvas = require('../build/default/canvas')
, Image = Canvas.Image;
/**
* Src setter.
*
* - convert data uri to `Buffer`
*
* @param {String|Buffer} val filename, buffer, data uri
* @api public
*/
Image.prototype.__defineSetter__('src', function(val){
if ('string' == typeof val && 0 == val.indexOf('data:')) {
val = val.slice(val.indexOf(',') + 1);
this.source = new Buffer(val, 'base64');
} else {
this.source = val;
}
});
/**
* Src getter.
*
* TODO: return buffer
*
* @api public
*/
Image.prototype.__defineGetter__('src', function(){
return this.source;
});
/**
* Inspect image.
*
* TODO: indicate that the .src was a buffer, data uri etc
*
* @return {String}
* @api public
*/

6
src/Image.cc

@ -51,7 +51,7 @@ Image::Initialize(Handle<Object> target) {
// Prototype
Local<ObjectTemplate> proto = constructor->PrototypeTemplate();
proto->SetAccessor(String::NewSymbol("src"), GetSrc, SetSrc);
proto->SetAccessor(String::NewSymbol("source"), GetSource, SetSource);
proto->SetAccessor(String::NewSymbol("complete"), GetComplete);
proto->SetAccessor(String::NewSymbol("width"), GetWidth);
proto->SetAccessor(String::NewSymbol("height"), GetHeight);
@ -109,7 +109,7 @@ Image::GetHeight(Local<String>, const AccessorInfo &info) {
*/
Handle<Value>
Image::GetSrc(Local<String>, const AccessorInfo &info) {
Image::GetSource(Local<String>, const AccessorInfo &info) {
HandleScope scope;
Image *img = ObjectWrap::Unwrap<Image>(info.This());
return scope.Close(String::New(img->filename ? img->filename : ""));
@ -120,7 +120,7 @@ Image::GetSrc(Local<String>, const AccessorInfo &info) {
*/
void
Image::SetSrc(Local<String>, Local<Value> val, const AccessorInfo &info) {
Image::SetSource(Local<String>, Local<Value> val, const AccessorInfo &info) {
HandleScope scope;
Image *img = ObjectWrap::Unwrap<Image>(info.This());
cairo_status_t status = CAIRO_STATUS_READ_ERROR;

4
src/Image.h

@ -19,13 +19,13 @@ class Image: public node::ObjectWrap {
static Persistent<FunctionTemplate> constructor;
static void Initialize(Handle<Object> target);
static Handle<Value> New(const Arguments &args);
static Handle<Value> GetSrc(Local<String> prop, const AccessorInfo &info);
static Handle<Value> GetSource(Local<String> prop, const AccessorInfo &info);
static Handle<Value> GetOnload(Local<String> prop, const AccessorInfo &info);
static Handle<Value> GetOnerror(Local<String> prop, const AccessorInfo &info);
static Handle<Value> GetComplete(Local<String> prop, const AccessorInfo &info);
static Handle<Value> GetWidth(Local<String> prop, const AccessorInfo &info);
static Handle<Value> GetHeight(Local<String> prop, const AccessorInfo &info);
static void SetSrc(Local<String> prop, Local<Value> val, const AccessorInfo &info);
static void SetSource(Local<String> prop, Local<Value> val, const AccessorInfo &info);
static void SetOnload(Local<String> prop, Local<Value> val, const AccessorInfo &info);
static void SetOnerror(Local<String> prop, Local<Value> val, const AccessorInfo &info);
inline cairo_surface_t *surface(){ return _surface; }

Loading…
Cancel
Save