@@ -20,60 +20,82 @@ async function resize(fromImage, toImage, config = {})
2020 if ( /*inArray(extension, imageExtensions.ico)/* || */ inArray ( extension , imageExtensions . ico ) ) // Unsupported images format for resize
2121 return reject ( { } ) ;
2222
23- sharp ( fromImage , { failOn : 'none' } ) . flatten ( { background : { r : 255 , g : 255 , b : 255 } } ) . jpeg ( { quality : config . quality } ) . resize ( config ) . toFile ( toImage , async function ( error ) {
24-
25- if ( error && / u n s u p p o r t e d i m a g e f o r m a t / iu. test ( error ?. message || '' ) )
26- {
27- if ( ! imageMagick ) imageMagick = require ( 'gm' ) . subClass ( { imageMagick : true } ) ;
23+ _resize ( fromImage , toImage , config , resolve , reject ) ;
2824
29- imageMagick ( fromImage ) . resize ( config . width , null ) . quality ( config . quality ) . noProfile ( ) . write ( toImage , function ( error ) {
25+ } ) ;
26+ }
3027
31- if ( error )
32- {
33- if ( ! graphicsMagick ) graphicsMagick = require ( 'gm' ) . subClass ( { imageMagick : false } ) ;
28+ async function _resize ( fromImage , toImage , config = { } , resolve , reject , deep = 0 )
29+ {
30+ let options = { }
3431
35- graphicsMagick ( fromImage ) . resize ( config . width , null ) . quality ( config . quality ) . noProfile ( ) . write ( toImage , async function ( error ) {
32+ if ( deep > 3 )
33+ options = { failOn : 'none' } ;
3634
37- if ( error )
38- {
39- if ( jimp === false ) jimp = require ( 'jimp' ) . Jimp ;
35+ sharp ( fromImage , options ) . flatten ( { background : { r : 255 , g : 255 , b : 255 } } ) . jpeg ( { quality : config . quality } ) . resize ( config ) . toFile ( toImage , async function ( error ) {
4036
41- try
42- {
43- const jimpImage = await jimp . read ( fromImage ) ;
44- await jimpImage . resize ( { w : config . width } ) . write ( toImage , { quality : config . quality } ) ;
37+ if ( error && / u n s u p p o r t e d i m a g e f o r m a t / iu. test ( error ?. message || '' ) )
38+ {
39+ if ( ! imageMagick ) imageMagick = require ( 'gm' ) . subClass ( { imageMagick : true } ) ;
4540
46- resolve ( toImage ) ;
47- }
48- catch ( error )
49- {
50- reject ( error ) ;
51- }
52- }
53- else
41+ imageMagick ( fromImage ) . resize ( config . width , null ) . quality ( config . quality ) . noProfile ( ) . write ( toImage , function ( error ) {
42+
43+ if ( error )
44+ {
45+ if ( ! graphicsMagick ) graphicsMagick = require ( 'gm' ) . subClass ( { imageMagick : false } ) ;
46+
47+ graphicsMagick ( fromImage ) . resize ( config . width , null ) . quality ( config . quality ) . noProfile ( ) . write ( toImage , async function ( error ) {
48+
49+ if ( error )
50+ {
51+ if ( jimp === false ) jimp = require ( 'jimp' ) . Jimp ;
52+
53+ try
5454 {
55+ const jimpImage = await jimp . read ( fromImage ) ;
56+ await jimpImage . resize ( { w : config . width } ) . write ( toImage , { quality : config . quality } ) ;
57+
5558 resolve ( toImage ) ;
5659 }
57- } ) ;
60+ catch ( error )
61+ {
62+ reject ( error ) ;
63+ }
64+ }
65+ else
66+ {
67+ resolve ( toImage ) ;
68+ }
69+ } ) ;
5870
59- }
60- else
61- {
62- resolve ( toImage ) ;
63- }
64- } ) ;
65- }
66- else if ( error )
71+ }
72+ else
73+ {
74+ resolve ( toImage ) ;
75+ }
76+ } ) ;
77+ }
78+ else if ( error )
79+ {
80+ if ( deep > 3 )
6781 {
6882 console . error ( fromImage , error ) ;
6983 reject ( error ) ;
7084 }
7185 else
7286 {
73- resolve ( toImage ) ;
74- }
75- } ) ;
87+ deep ++ ;
88+
89+ console . error ( 'Error: ' + ( deep > 3 ? 'Trying once more' : 'Trying again' ) + ' in ' + ( 100 * deep ) + 'ms' + ( deep > 3 ? ' with failOn: none' : '' ) + ' | ' + fromImage , error ) ;
7690
91+ await app . sleep ( 100 * deep ) ;
92+ _resize ( fromImage , toImage , config , resolve , reject , deep ) ;
93+ }
94+ }
95+ else
96+ {
97+ resolve ( toImage ) ;
98+ }
7799 } ) ;
78100}
79101
0 commit comments