diff --git a/package.json b/package.json index 7f6af8c9..a846aefc 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,6 @@ "urify": "^2.1.0" }, "devDependencies": { - "base64-stream": "~0.1.3", "browserify": "13.0.0", "buffer": "~5.0.2", "get-pixels": "~3.3.0", diff --git a/src/modules/Crop/Crop.js b/src/modules/Crop/Crop.js index ec9ad1c3..6130b58a 100644 --- a/src/modules/Crop/Crop.js +++ b/src/modules/Crop/Crop.js @@ -1,17 +1,15 @@ module.exports = function Crop(input,options,callback) { - var getPixels = require("get-pixels"), - savePixels = require("save-pixels"), - base64 = require('base64-stream'); + var getPixels = require('get-pixels'), + savePixels = require('save-pixels'); getPixels(input.src,function(err,pixels){ - var newdata = []; var ox = options.x || 0; var oy = options.y || 0; var w = options.w || Math.floor(0.5*pixels.shape[0]); var h = options.h || Math.floor(0.5*pixels.shape[1]); var iw = pixels.shape[0]; //Width of Original Image - newarray = new Uint8Array(4*w*h); + var newarray = new Uint8Array(4*w*h); for (var n = oy; n < oy + h; n++) { newarray.set(pixels.data.slice(n*4*iw + ox, n*4*iw + ox + 4*w),4*w*(n-oy)); } @@ -19,15 +17,19 @@ module.exports = function Crop(input,options,callback) { pixels.shape = [w,h,4]; pixels.stride[1] = 4*w; - options.format = "jpeg"; - - w = base64.encode(); + var chunks = []; + var totalLength = 0; var r = savePixels(pixels, options.format); - r.pipe(w).on('finish',function(){ - data = w.read().toString(); - datauri = 'data:image/' + options.format + ';base64,' + data; + + r.on('data', function(chunk){ + totalLength += chunk.length; + chunks.push(chunk); + }); + + r.on('end', function(){ + var data = Buffer.concat(chunks, totalLength).toString('base64'); + var datauri = 'data:image/' + options.format + ';base64,' + data; callback(datauri,options.format); }); }); - -} +}; diff --git a/src/modules/_nomodule/PixelManipulation.js b/src/modules/_nomodule/PixelManipulation.js index 335cddca..efb25863 100644 --- a/src/modules/_nomodule/PixelManipulation.js +++ b/src/modules/_nomodule/PixelManipulation.js @@ -7,16 +7,15 @@ module.exports = function PixelManipulation(image, options) { options = options || {}; options.changePixel = options.changePixel || function changePixel(r, g, b, a) { return [r, g, b, a]; - } - var getPixels = require("get-pixels"), - savePixels = require("save-pixels"), - base64 = require('base64-stream'); + }; + var getPixels = require('get-pixels'), + savePixels = require('save-pixels'); getPixels(image.src, function(err, pixels) { if(err) { - console.log("Bad image path") - return + console.log('Bad image path'); + return; } // iterate through pixels; @@ -25,7 +24,7 @@ module.exports = function PixelManipulation(image, options) { for(var x = 0; x < pixels.shape[0]; x++) { for(var y = 0; y < pixels.shape[1]; y++) { - pixel = options.changePixel( + var pixel = options.changePixel( pixels.get(x, y, 0), pixels.get(x, y, 1), pixels.get(x, y, 2), @@ -40,19 +39,22 @@ module.exports = function PixelManipulation(image, options) { } } - options.format = "jpeg"; - // there may be a more efficient means to encode an image object, // but node modules and their documentation are essentially arcane on this point - w = base64.encode(); + var chunks = []; + var totalLength = 0; var r = savePixels(pixels, options.format); - r.pipe(w).on('finish',function(){ - data = w.read().toString(); - datauri = 'data:image/' + options.format + ';base64,' + data; + + r.on('data', function(chunk){ + totalLength += chunk.length; + chunks.push(chunk); + }); + + r.on('end', function(){ + var data = Buffer.concat(chunks, totalLength).toString('base64'); + var datauri = 'data:image/' + options.format + ';base64,' + data; if (options.output) options.output(options.image,datauri,options.format); if (options.callback) options.callback(); }); - }); - -} +};