@@ -23,16 +23,16 @@ <h1><a href="index.html">All files</a> image-compression.js</h1>
2323 < div class ='clearfix '>
2424
2525 < div class ='fl pad1y space-right2 '>
26- < span class ="strong "> 95.65 % </ span >
26+ < span class ="strong "> 95.92 % </ span >
2727 < span class ="quiet "> Statements</ span >
28- < span class ='fraction '> 44/46 </ span >
28+ < span class ='fraction '> 47/49 </ span >
2929 </ div >
3030
3131
3232 < div class ='fl pad1y space-right2 '>
33- < span class ="strong "> 84.21 % </ span >
33+ < span class ="strong "> 80.77 % </ span >
3434 < span class ="quiet "> Branches</ span >
35- < span class ='fraction '> 16/19 </ span >
35+ < span class ='fraction '> 21/26 </ span >
3636 </ div >
3737
3838
@@ -44,9 +44,9 @@ <h1><a href="index.html">All files</a> image-compression.js</h1>
4444
4545
4646 < div class ='fl pad1y space-right2 '>
47- < span class ="strong "> 95.65 % </ span >
47+ < span class ="strong "> 95.92 % </ span >
4848 < span class ="quiet "> Lines</ span >
49- < span class ='fraction '> 44/46 </ span >
49+ < span class ='fraction '> 47/49 </ span >
5050 </ div >
5151
5252
@@ -166,7 +166,12 @@ <h1><a href="index.html">All files</a> image-compression.js</h1>
166166< a name ='L107 '> </ a > < a href ='#L107 '> 107</ a >
167167< a name ='L108 '> </ a > < a href ='#L108 '> 108</ a >
168168< a name ='L109 '> </ a > < a href ='#L109 '> 109</ a >
169- < a name ='L110 '> </ a > < a href ='#L110 '> 110</ a > </ td > < td class ="line-coverage quiet "> < span class ="cline-any cline-neutral "> </ span >
169+ < a name ='L110 '> </ a > < a href ='#L110 '> 110</ a >
170+ < a name ='L111 '> </ a > < a href ='#L111 '> 111</ a >
171+ < a name ='L112 '> </ a > < a href ='#L112 '> 112</ a >
172+ < a name ='L113 '> </ a > < a href ='#L113 '> 113</ a >
173+ < a name ='L114 '> </ a > < a href ='#L114 '> 114</ a >
174+ < a name ='L115 '> </ a > < a href ='#L115 '> 115</ a > </ td > < td class ="line-coverage quiet "> < span class ="cline-any cline-neutral "> </ span >
170175< span class ="cline-any cline-neutral "> </ span >
171176< span class ="cline-any cline-neutral "> </ span >
172177< span class ="cline-any cline-neutral "> </ span >
@@ -200,8 +205,8 @@ <h1><a href="index.html">All files</a> image-compression.js</h1>
200205< span class ="cline-any cline-neutral "> </ span >
201206< span class ="cline-any cline-neutral "> </ span >
202207< span class ="cline-any cline-neutral "> </ span >
203- < span class ="cline-any cline-yes "> 12x </ span >
204- < span class ="cline-any cline-yes "> 12x </ span >
208+ < span class ="cline-any cline-yes "> 15x </ span >
209+ < span class ="cline-any cline-yes "> 15x </ span >
205210< span class ="cline-any cline-no "> </ span >
206211< span class ="cline-any cline-neutral "> </ span >
207212< span class ="cline-any cline-neutral "> </ span >
@@ -234,34 +239,39 @@ <h1><a href="index.html">All files</a> image-compression.js</h1>
234239< span class ="cline-any cline-yes "> 6x</ span >
235240< span class ="cline-any cline-neutral "> </ span >
236241< span class ="cline-any cline-yes "> 6x</ span >
242+ < span class ="cline-any cline-yes "> 6x</ span >
243+ < span class ="cline-any cline-neutral "> </ span >
244+ < span class ="cline-any cline-neutral "> </ span >
245+ < span class ="cline-any cline-yes "> 6x</ span >
237246< span class ="cline-any cline-neutral "> </ span >
238247< span class ="cline-any cline-yes "> 4x</ span >
239248< span class ="cline-any cline-yes "> 4x</ span >
240249< span class ="cline-any cline-neutral "> </ span >
241250< span class ="cline-any cline-neutral "> </ span >
242251< span class ="cline-any cline-yes "> 2x</ span >
243252< span class ="cline-any cline-yes "> 2x</ span >
253+ < span class ="cline-any cline-yes "> 2x</ span >
244254< span class ="cline-any cline-neutral "> </ span >
245255< span class ="cline-any cline-neutral "> </ span >
246256< span class ="cline-any cline-yes "> 2x</ span >
247257< span class ="cline-any cline-yes "> 2x</ span >
248- < span class ="cline-any cline-yes "> 6x </ span >
249- < span class ="cline-any cline-yes "> 6x </ span >
250- < span class ="cline-any cline-yes "> 6x </ span >
258+ < span class ="cline-any cline-yes "> 9x </ span >
259+ < span class ="cline-any cline-yes "> 9x </ span >
260+ < span class ="cline-any cline-yes "> 9x </ span >
251261< span class ="cline-any cline-neutral "> </ span >
252- < span class ="cline-any cline-yes "> 6x </ span >
262+ < span class ="cline-any cline-yes "> 9x </ span >
253263< span class ="cline-any cline-neutral "> </ span >
254- < span class ="cline-any cline-yes "> 6x </ span >
264+ < span class ="cline-any cline-yes "> 9x </ span >
255265< span class ="cline-any cline-yes "> 2x</ span >
256266< span class ="cline-any cline-neutral "> </ span >
257- < span class ="cline-any cline-yes "> 6x </ span >
267+ < span class ="cline-any cline-yes "> 9x </ span >
258268< span class ="cline-any cline-neutral "> </ span >
259- < span class ="cline-any cline-yes "> 6x </ span >
269+ < span class ="cline-any cline-yes "> 9x </ span >
260270< span class ="cline-any cline-neutral "> </ span >
261- < span class ="cline-any cline-yes "> 6x </ span >
271+ < span class ="cline-any cline-yes "> 9x </ span >
262272< span class ="cline-any cline-neutral "> </ span >
263- < span class ="cline-any cline-yes "> 6x </ span >
264- < span class ="cline-any cline-yes "> 6x </ span >
273+ < span class ="cline-any cline-yes "> 9x </ span >
274+ < span class ="cline-any cline-yes "> 9x </ span >
265275< span class ="cline-any cline-neutral "> </ span >
266276< span class ="cline-any cline-neutral "> </ span >
267277< span class ="cline-any cline-neutral "> </ span >
@@ -341,27 +351,32 @@ <h1><a href="index.html">All files</a> image-compression.js</h1>
341351
342352 let tempFile = await canvasToFile(orientationFixedCanvas, options.fileType || file.type, file.name, file.lastModified, quality)
343353 incProgress()
354+
355+ const origExceedMaxSize = tempFile.size > maxSizeByte
356+ const sizeBecomeLarger = tempFile.size > file.size
357+
344358 // check if we need to compress or resize
345- if (tempFile.size <= maxSizeByte ) {
359+ if (!origExceedMaxSize && !sizeBecomeLarger ) {
346360 // no need to compress
347361 setProgress(100)
348362 return tempFile
349363 }
350364
351- const originalSize = tempFile.size
352- let currentSize = originalSize
365+ const sourceSize = file.size
366+ const renderedSize = tempFile.size
367+ let currentSize = renderedSize
353368 let compressedFile
354369 let newCanvas, ctx
355370 let canvas = orientationFixedCanvas
356- while (remainingTrials-- && currentSize > maxSizeByte) {
357- const newWidth = canvas.width * 0.9
358- const newHeight = canvas.height * 0.9;
371+ while (remainingTrials-- && ( currentSize > maxSizeByte || currentSize > sourceSize) ) {
372+ const newWidth = origExceedMaxSize ? canvas.width * 0.95 : < span class =" branch-1 cbranch-no " title =" branch not covered " > canvas.width </ span >
373+ const newHeight = origExceedMaxSize ? canvas.height * 0.95 : < span class =" branch-1 cbranch-no " title =" branch not covered " > canvas.height; </ span >
359374 [newCanvas, ctx] = getNewCanvasAndCtx(newWidth, newHeight)
360375
361376 ctx.drawImage(canvas, 0, 0, newWidth, newHeight)
362377
363378 if (file.type === 'image/jpeg') {
364- quality *= 0.9
379+ quality *= 0.95
365380 }
366381 compressedFile = await canvasToFile(newCanvas, options.fileType || file.type, file.name, file.lastModified, quality)
367382
@@ -370,7 +385,7 @@ <h1><a href="index.html">All files</a> image-compression.js</h1>
370385 canvas = newCanvas
371386
372387 currentSize = compressedFile.size
373- setProgress(Math.min(99, Math.floor((originalSize - currentSize) / (originalSize - maxSizeByte) * 100)))
388+ setProgress(Math.min(99, Math.floor((renderedSize - currentSize) / (renderedSize - maxSizeByte) * 100)))
374389 }
375390
376391 // garbage clean canvas for safari
@@ -391,7 +406,7 @@ <h1><a href="index.html">All files</a> image-compression.js</h1>
391406 < div class ='footer quiet pad2 space-top1 center small '>
392407 Code coverage generated by
393408 < a href ="https://istanbul.js.org/ " target ="_blank "> istanbul</ a >
394- at Mon Mar 16 2020 16:08:11 GMT+0800 (Hong Kong Standard Time)
409+ at Wed Mar 25 2020 23:40:22 GMT+0800 (Hong Kong Standard Time)
395410 </ div >
396411 </ div >
397412 < script src ="prettify.js "> </ script >
0 commit comments