@@ -21,7 +21,7 @@ const meow = require('meow');
2121const mkdirp = require ( 'mkdirp' ) ;
2222const ora = require ( 'ora' ) ;
2323const ProgressBar = require ( 'progress' ) ;
24- const screenshot = require ( 'screenshot-stream ' ) ;
24+ const puppeteer = require ( 'puppeteer ' ) ;
2525const some = require ( 'lodash/some' ) ;
2626const typeis = require ( 'type-is' ) ;
2727const 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 ) {
0 commit comments