LoadImages will return nothing, only call a callback

This commit is contained in:
Chinmay Pandhare
2017-07-28 12:00:30 +05:30
parent d7eb5a2f0c
commit 7f17f825ab
6 changed files with 83 additions and 45 deletions

View File

@@ -34708,14 +34708,13 @@ ImageSequencer = function ImageSequencer(options) {
function loadImages() { function loadImages() {
var args = []; var args = [];
var sequencer = this;
for (var arg in arguments) args.push(copy(arguments[arg])); for (var arg in arguments) args.push(copy(arguments[arg]));
var json_q = formatInput.call(this,args,"l"); var json_q = formatInput.call(this,args,"l");
inputlog.push({method:"loadImages", json_q:copy(json_q)}); inputlog.push({method:"loadImages", json_q:copy(json_q)});
var loadedimages = this.copy(json_q.loadedimages); var loadedimages = this.copy(json_q.loadedimages);
// require('./LoadImage')(this,i,json_q.images[i]);
for (var i in json_q.images)
require('./LoadImage')(this,i,json_q.images[i])
var ret = { var ret = {
name: "ImageSequencer Wrapper", name: "ImageSequencer Wrapper",
@@ -34728,7 +34727,20 @@ ImageSequencer = function ImageSequencer(options) {
setUI: this.setUI, setUI: this.setUI,
images: loadedimages images: loadedimages
}; };
function load(i) {
if(i==loadedimages.length) {
json_q.callback.call(ret); json_q.callback.call(ret);
return;
}
var img = loadedimages[i];
require('./LoadImage')(sequencer,img,json_q.images[img],function(){
load(++i);
});
}
load(0);
return ret; return ret;
} }
@@ -34799,7 +34811,7 @@ function InsertStep(ref, image, index, name, o) {
module.exports = InsertStep; module.exports = InsertStep;
},{}],115:[function(require,module,exports){ },{}],115:[function(require,module,exports){
function LoadImage(ref, name, src) { function LoadImage(ref, name, src, main_callback) {
function makeImage(datauri) { function makeImage(datauri) {
var image = { var image = {
src: datauri, src: datauri,
@@ -34868,6 +34880,7 @@ function LoadImage(ref, name, src) {
ref.images[name].steps[0].UI.onSetup(); ref.images[name].steps[0].UI.onSetup();
ref.images[name].steps[0].UI.onDraw(); ref.images[name].steps[0].UI.onDraw();
ref.images[name].steps[0].UI.onComplete(image.steps[0].output.src); ref.images[name].steps[0].UI.onComplete(image.steps[0].output.src);
main_callback();
return true; return true;
}); });
} }
@@ -35481,7 +35494,7 @@ module.exports = function PixelManipulation(image, options) {
// but node modules and their documentation are essentially arcane on this point // but node modules and their documentation are essentially arcane on this point
var chunks = []; var chunks = [];
var totalLength = 0; var totalLength = 0;
var r = savePixels(pixels, options.format); var r = savePixels(pixels, options.format, {quality: 100});
r.on('data', function(chunk){ r.on('data', function(chunk){
totalLength += chunk.length; totalLength += chunk.length;

View File

@@ -133,14 +133,13 @@ ImageSequencer = function ImageSequencer(options) {
function loadImages() { function loadImages() {
var args = []; var args = [];
var sequencer = this;
for (var arg in arguments) args.push(copy(arguments[arg])); for (var arg in arguments) args.push(copy(arguments[arg]));
var json_q = formatInput.call(this,args,"l"); var json_q = formatInput.call(this,args,"l");
inputlog.push({method:"loadImages", json_q:copy(json_q)}); inputlog.push({method:"loadImages", json_q:copy(json_q)});
var loadedimages = this.copy(json_q.loadedimages); var loadedimages = this.copy(json_q.loadedimages);
// require('./LoadImage')(this,i,json_q.images[i]);
for (var i in json_q.images)
require('./LoadImage')(this,i,json_q.images[i])
var ret = { var ret = {
name: "ImageSequencer Wrapper", name: "ImageSequencer Wrapper",
@@ -153,8 +152,19 @@ ImageSequencer = function ImageSequencer(options) {
setUI: this.setUI, setUI: this.setUI,
images: loadedimages images: loadedimages
}; };
function load(i) {
if(i==loadedimages.length) {
json_q.callback.call(ret); json_q.callback.call(ret);
return ret; return;
}
var img = loadedimages[i];
require('./LoadImage')(sequencer,img,json_q.images[img],function(){
load(++i);
});
}
load(0);
} }
function replaceImage(selector,steps,options) { function replaceImage(selector,steps,options) {

View File

@@ -1,4 +1,4 @@
function LoadImage(ref, name, src) { function LoadImage(ref, name, src, main_callback) {
function makeImage(datauri) { function makeImage(datauri) {
var image = { var image = {
src: datauri, src: datauri,
@@ -67,6 +67,7 @@ function LoadImage(ref, name, src) {
ref.images[name].steps[0].UI.onSetup(); ref.images[name].steps[0].UI.onSetup();
ref.images[name].steps[0].UI.onDraw(); ref.images[name].steps[0].UI.onDraw();
ref.images[name].steps[0].UI.onComplete(image.steps[0].output.src); ref.images[name].steps[0].UI.onComplete(image.steps[0].output.src);
main_callback();
return true; return true;
}); });
} }

View File

@@ -17,15 +17,19 @@ test('loadImages/loadImage has a name generator.', function (t){
t.end(); t.end();
}); });
test('loadImages/loadImage returns a wrapper.', function (t){ test('loadImages/loadImage returns a wrapper in the callback.', function (t){
var returnval = sequencer.loadImage(red); sequencer.loadImage(red, function() {
var returnval = this;
t.equal(returnval.name,"ImageSequencer Wrapper", "Wrapper is returned"); t.equal(returnval.name,"ImageSequencer Wrapper", "Wrapper is returned");
t.equal(returnval.images[0],"image2","Image scope is defined"); t.equal(returnval.images[0],"image2","Image scope is defined");
t.end(); t.end();
}); });
});
test('addSteps is two-way chainable.', function (t){ test('addSteps is two-way chainable.', function (t){
var returnval = sequencer.loadImage(red).addSteps('invert'); sequencer.loadImage(red, function(){
var returnval = this;
this.addSteps('invert');
t.equal(returnval.name,"ImageSequencer Wrapper", "Wrapper is returned"); t.equal(returnval.name,"ImageSequencer Wrapper", "Wrapper is returned");
t.equal(returnval.images[0],"image3","Image scope is defined"); t.equal(returnval.images[0],"image3","Image scope is defined");
t.equal(sequencer.images.image3.steps.length,2,"Loaded image is affected"); t.equal(sequencer.images.image3.steps.length,2,"Loaded image is affected");
@@ -34,6 +38,7 @@ test('addSteps is two-way chainable.', function (t){
t.equal(sequencer.images.image1.steps.length,1,"Other images are not affected"); t.equal(sequencer.images.image1.steps.length,1,"Other images are not affected");
t.end(); t.end();
}); });
});
test('addSteps is two-way chainable without loadImages.', function (t){ test('addSteps is two-way chainable without loadImages.', function (t){
var returnval = sequencer.addSteps("image3","ndvi-red"); var returnval = sequencer.addSteps("image3","ndvi-red");
@@ -44,12 +49,15 @@ test('addSteps is two-way chainable without loadImages.', function (t){
}); });
test('removeSteps is two-way chainable.', function (t){ test('removeSteps is two-way chainable.', function (t){
var returnval = sequencer.loadImage(red).addSteps('invert').removeSteps(1); sequencer.loadImage(red,function(){
var returnval = this;
this.addSteps('invert').removeSteps(1);
t.equal(returnval.name,"ImageSequencer Wrapper", "Wrapper is returned"); t.equal(returnval.name,"ImageSequencer Wrapper", "Wrapper is returned");
t.equal(returnval.images[0],"image4","Image scope is defined"); t.equal(returnval.images[0],"image4","Image scope is defined");
t.equal(sequencer.images.image4.steps.length,1); t.equal(sequencer.images.image4.steps.length,1);
t.end(); t.end();
}); });
});
test('removeSteps is two-way chainable without loadImages.', function (t){ test('removeSteps is two-way chainable without loadImages.', function (t){
var returnval = sequencer.removeSteps("image3",1); var returnval = sequencer.removeSteps("image3",1);
@@ -59,13 +67,16 @@ test('removeSteps is two-way chainable without loadImages.', function (t){
}); });
test('insertSteps is two-way chainable.', function (t){ test('insertSteps is two-way chainable.', function (t){
var returnval = sequencer.loadImage(red).insertSteps(1,'invert'); sequencer.loadImage(red,function() {
var returnval = this;
this.insertSteps(1,'invert');
t.equal(returnval.name,"ImageSequencer Wrapper","Wrapper is returned"); t.equal(returnval.name,"ImageSequencer Wrapper","Wrapper is returned");
t.equal(returnval.images[0],"image5","Image scope is defined"); t.equal(returnval.images[0],"image5","Image scope is defined");
t.equal(sequencer.images.image5.steps.length,2); t.equal(sequencer.images.image5.steps.length,2);
t.equal(sequencer.images.image5.steps[1].options.name,"invert","Correct Step Inserrted"); t.equal(sequencer.images.image5.steps[1].options.name,"invert","Correct Step Inserrted");
t.end(); t.end();
}); });
});
test('insertSteps is two-way chainable without loadImages.', function (t){ test('insertSteps is two-way chainable without loadImages.', function (t){
var returnval = sequencer.insertSteps("image5",1,"ndvi-red"); var returnval = sequencer.insertSteps("image5",1,"ndvi-red");

View File

@@ -10,11 +10,10 @@ require('../src/ImageSequencer.js');
//require image files as DataURLs so they can be tested alike on browser and Node. //require image files as DataURLs so they can be tested alike on browser and Node.
var sequencer = ImageSequencer({ ui: false }); var sequencer = ImageSequencer({ ui: false });
var image = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAQABADASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAf/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/8QAFQEBAQAAAAAAAAAAAAAAAAAABgj/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwCdABykX//Z";
var test_png = require('../examples/test.png.js'); var test_png = require('../examples/test.png.js');
var test_gif = require('../examples/test.gif.js'); var test_gif = require('../examples/test.gif.js');
sequencer.loadImages(image); sequencer.loadImages(test_png);
sequencer.addSteps(['do-nothing-pix','invert','invert']); sequencer.addSteps(['do-nothing-pix','invert','invert']);
test("Preload", function(t) { test("Preload", function(t) {
@@ -34,15 +33,19 @@ test("Twice inverted image is identical to original image", function (t) {
}); });
test("PixelManipulation works for PNG images", function (t) { test("PixelManipulation works for PNG images", function (t) {
sequencer.loadImages(test_png).addSteps('invert').run(function(out){ sequencer.loadImages(test_png,function(){
this.addSteps('invert').run(function(out){
t.equal(1,1) t.equal(1,1)
t.end(); t.end();
}); });
}); });
});
test("PixelManipulation works for GIF images", function (t) { test("PixelManipulation works for GIF images", function (t) {
sequencer.loadImages(test_gif).addSteps('invert').run(function(out){ sequencer.loadImages(test_gif,function(){
this.addSteps('invert').run(function(out){
t.equal(1,1) t.equal(1,1)
t.end(); t.end();
}); });
}); });
});

View File

@@ -42,7 +42,7 @@ test('loadImages loads a DataURL image and creates a step.', function (t){
test('loadImages loads a PATH image and creates a step. (NodeJS)', function (t){ test('loadImages loads a PATH image and creates a step. (NodeJS)', function (t){
if(sequencer.options.inBrowser){ if(sequencer.options.inBrowser){
t.equal("not applicable","not applicable","Not applicable for Browser"); t.equal(1,1,"Not applicable for Browser");
t.end(); t.end();
} }
else { else {