Skip to content

Commit 37938f5

Browse files
authored
Merge pull request #21 from ramon82/master
Use puppeteer instead of phantomjs
2 parents a700b28 + 5371f3a commit 37938f5

File tree

2 files changed

+49
-20
lines changed

2 files changed

+49
-20
lines changed

cli.js

Lines changed: 48 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ const meow = require('meow');
2121
const mkdirp = require('mkdirp');
2222
const ora = require('ora');
2323
const ProgressBar = require('progress');
24-
const screenshot = require('screenshot-stream');
24+
const puppeteer = require('puppeteer');
2525
const some = require('lodash/some');
2626
const typeis = require('type-is');
2727
const uniq = require('lodash/uniq');
@@ -36,7 +36,8 @@ readline.emitKeypressEvents(process.stdin);
3636
/* ------ */
3737

3838
// Help text
39-
const cli = meow(`
39+
const cli = meow(
40+
`
4041
Usage
4142
# Pass in any number of image files (globs allows), image urls, or website urls:
4243
$ dframe <image>
@@ -373,25 +374,52 @@ function frameIt(img, frameConf) {
373374
if (typeis(response, ['image/*'])) return response.body;
374375

375376
// Scale image size for device pixel density
376-
const w = Math.floor(frameConf.frame.width / (frameConf.pixelRatio || 1));
377-
const h = Math.floor(frameConf.frame.height / (frameConf.pixelRatio || 1));
377+
const pixelRatio = frameConf.pixelRatio;
378+
const w = Math.floor(frameConf.frame.width / 1);
379+
const h = Math.floor(frameConf.frame.height / 1);
378380
const dim = [w, h].join('x');
379381

380-
const spinner = ora(`Screenshotting ${imgUrl} at ${dim}`).start();
382+
const spinner = ora(`ing ${imgUrl} at ${dim}`).start();
381383

382384
// TODO: need to dynamically choose device user-agent from a list, or store them with the frames
383-
const ua = 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1';
384-
const stream = screenshot(imgUrl, dim, { crop: false, userAgent: ua, delay: cli.flags.delay })
385-
.on('error', err => {
386-
spinner.fail();
387-
error(err);
388-
})
389-
.on('end', () => spinner.succeed());
390-
391-
const bufPromise = getStream.buffer(stream);
392-
// bufPromise.then(buf => {
393-
// fs.writeFileSync('test.png', buf, { encoding: 'binary' });
394-
// });
385+
const delay = 1000 || cli.flags.delay * 1000;
386+
const bufPromise = new Promise((resolve, reject) => {
387+
puppeteer.launch().then(browser => {
388+
browser.newPage()
389+
.then(page => {
390+
page.goto(imgUrl);
391+
392+
const shot = () => {
393+
page.setViewport({
394+
width: w,
395+
height: h,
396+
deviceScaleFactor: pixelRatio,
397+
});
398+
page.screenshot().then(buffer => {
399+
spinner.succeed();
400+
browser.close();
401+
402+
resolve(buffer);
403+
}).catch(err => {
404+
spinner.fail();
405+
browser.close();
406+
407+
reject(err);
408+
});
409+
};
410+
411+
const onload = () => {
412+
setTimeout(shot, delay);
413+
};
414+
415+
page.on('load', onload);
416+
})
417+
.catch(err => {
418+
spinner.fail();
419+
reject(err);
420+
});
421+
});
422+
});
395423

396424
return Promise.all([bufPromise, w, h]);
397425
})
@@ -422,7 +450,7 @@ function frameIt(img, frameConf) {
422450
Jimp.read(imgData),
423451
]);
424452
})
425-
// Resize largest image to fit the other
453+
// Resize largest image to fit the other
426454
.then(([frame, jimg]) => {
427455
debug('Resizing frame/image');
428456

@@ -465,8 +493,8 @@ function frameIt(img, frameConf) {
465493

466494
jimg.cover(newFrameWidth, newFrameHeight);
467495
} else {
468-
// Source image is bigger, size it down to frame
469-
// Resize frame so shortest dimension matches
496+
// Source image is bigger, size it down to frame
497+
// Resize frame so shortest dimension matches
470498
let rH = jimg.bitmap.height;
471499
let rW = jimg.bitmap.width;
472500
if (rH > rW) {

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
"mkdirp": "^0.5.1",
5151
"ora": "^1.3.0",
5252
"progress": "^2.0.0",
53+
"puppeteer": "^1.5.0",
5354
"screenshot-stream": "^4.2.0",
5455
"type-is": "^1.6.15"
5556
},

0 commit comments

Comments
 (0)