refactored the snapshot generation code.
This commit is contained in:
parent
a90da0467b
commit
db54f12fcc
22 changed files with 821 additions and 40 deletions
87
snapshot/getsnap.js
Normal file
87
snapshot/getsnap.js
Normal file
|
@ -0,0 +1,87 @@
|
|||
var app = require('app');
|
||||
var BrowserWindow = require('browser-window');
|
||||
var argv = require('yargs').argv;
|
||||
var fs = require('fs');
|
||||
var cp = require('child_process');
|
||||
|
||||
var mainWindow = null;
|
||||
var allWindowClosed = false;
|
||||
var pendingTasks = 0;
|
||||
var zoom = 2
|
||||
|
||||
function checkQuit(){
|
||||
if(allWindowClosed && pendingTasks == 0) app.quit();
|
||||
}
|
||||
|
||||
app.on('window-all-closed', function() {
|
||||
allWindowClosed = true;
|
||||
checkQuit()
|
||||
});
|
||||
|
||||
function combineImages(images, outfile, width, height, background, padding){
|
||||
var command = 'convert ' + images.join(' ') + ' -append -crop ' + width + 'x' + height + '+0+0 +repage -bordercolor rgb(52,52,53) -trim ' + outfile;
|
||||
console.log(command);
|
||||
cp.exec(command, function(err, stdout, stderr){
|
||||
images.forEach(function(file){
|
||||
fs.unlinkSync(file);
|
||||
});
|
||||
pendingTasks -= 1;
|
||||
checkQuit();
|
||||
})
|
||||
};
|
||||
|
||||
var ipc = require('electron').ipcMain;
|
||||
function GOTO(phase){ currentPhase = phase };
|
||||
var phases = {
|
||||
prepare : function(event, arg){
|
||||
console.log(arg);
|
||||
GOTO(phases['receive-rect']);
|
||||
},
|
||||
'receive-rect' : function(event, rect){
|
||||
pendingTasks += 1
|
||||
rect = JSON.parse(JSON.stringify(rect));
|
||||
var file = argv.dir + '/' + rect.name + '.png';
|
||||
var j = 0;
|
||||
var totalFiles = Math.ceil(rect.height / rect.windowHeight);
|
||||
var pendingFiles = totalFiles;
|
||||
function doneFileWrite(){
|
||||
pendingFiles -= 1;
|
||||
if(pendingFiles <= 0) {
|
||||
var images = [];
|
||||
for(var k = 0; k < j; k++){
|
||||
images.push(argv.dir + '/' + rect.name + '.' + k + '.png')
|
||||
}
|
||||
combineImages(images, file, rect.windowWidth * rect.dpi, rect.height * rect.dpi, rect.background, rect.padding);
|
||||
}
|
||||
}
|
||||
function step(){
|
||||
event.sender.send('scroll', rect.y + j * rect.windowHeight);
|
||||
GOTO(function(event){
|
||||
mainWindow.capturePage(function(image){
|
||||
fs.writeFile(argv.dir + '/' + rect.name + '.' + j + '.png', image.toPng(), doneFileWrite);
|
||||
j += 1;
|
||||
if(j >= totalFiles) { // Move to next image
|
||||
event.sender.send('complete', file);
|
||||
GOTO(phases['receive-rect']);
|
||||
} else {
|
||||
step()
|
||||
}
|
||||
})
|
||||
})
|
||||
};
|
||||
step()
|
||||
}
|
||||
};
|
||||
var currentPhase = phases['prepare'];
|
||||
ipc.on('snapshot', function(){
|
||||
currentPhase.apply(this, arguments)
|
||||
});
|
||||
ipc.on('log', function(event, arg){
|
||||
console.log(arg);
|
||||
})
|
||||
|
||||
app.on('ready', function() {
|
||||
mainWindow = new BrowserWindow({width: 64 * 16 * zoom, height: 1024 * zoom, x: 5000, y: 5000, zoomFactor: zoom});
|
||||
mainWindow.loadURL('file://' + __dirname + '/index.html');
|
||||
//mainWindow.hide();
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue