@@ -25,14 +25,14 @@ <h1><a href="index.html">All files</a> image-compression.js</h1>
25
25
< div class ='fl pad1y space-right2 '>
26
26
< span class ="strong "> 100% </ span >
27
27
< span class ="quiet "> Statements</ span >
28
- < span class ='fraction '> 47/47 </ span >
28
+ < span class ='fraction '> 53/53 </ span >
29
29
</ div >
30
30
31
31
32
32
< div class ='fl pad1y space-right2 '>
33
- < span class ="strong "> 83.33 % </ span >
33
+ < span class ="strong "> 80.77 % </ span >
34
34
< span class ="quiet "> Branches</ span >
35
- < span class ='fraction '> 20/24 </ span >
35
+ < span class ='fraction '> 21/26 </ span >
36
36
</ div >
37
37
38
38
@@ -46,7 +46,7 @@ <h1><a href="index.html">All files</a> image-compression.js</h1>
46
46
< div class ='fl pad1y space-right2 '>
47
47
< span class ="strong "> 100% </ span >
48
48
< span class ="quiet "> Lines</ span >
49
- < span class ='fraction '> 47/47 </ span >
49
+ < span class ='fraction '> 53/53 </ span >
50
50
</ div >
51
51
52
52
@@ -170,7 +170,19 @@ <h1><a href="index.html">All files</a> image-compression.js</h1>
170
170
< a name ='L111 '> </ a > < a href ='#L111 '> 111</ a >
171
171
< a name ='L112 '> </ a > < a href ='#L112 '> 112</ a >
172
172
< a name ='L113 '> </ a > < a href ='#L113 '> 113</ a >
173
- < a name ='L114 '> </ a > < a href ='#L114 '> 114</ a > </ td > < td class ="line-coverage quiet "> < span class ="cline-any cline-neutral "> </ span >
173
+ < a name ='L114 '> </ a > < a href ='#L114 '> 114</ a >
174
+ < a name ='L115 '> </ a > < a href ='#L115 '> 115</ a >
175
+ < a name ='L116 '> </ a > < a href ='#L116 '> 116</ a >
176
+ < a name ='L117 '> </ a > < a href ='#L117 '> 117</ a >
177
+ < a name ='L118 '> </ a > < a href ='#L118 '> 118</ a >
178
+ < a name ='L119 '> </ a > < a href ='#L119 '> 119</ a >
179
+ < a name ='L120 '> </ a > < a href ='#L120 '> 120</ a >
180
+ < a name ='L121 '> </ a > < a href ='#L121 '> 121</ a >
181
+ < a name ='L122 '> </ a > < a href ='#L122 '> 122</ a >
182
+ < a name ='L123 '> </ a > < a href ='#L123 '> 123</ a >
183
+ < a name ='L124 '> </ a > < a href ='#L124 '> 124</ a > </ td > < td class ="line-coverage quiet "> < span class ="cline-any cline-neutral "> </ span >
184
+ < span class ="cline-any cline-neutral "> </ span >
185
+ < span class ="cline-any cline-neutral "> </ span >
174
186
< span class ="cline-any cline-neutral "> </ span >
175
187
< span class ="cline-any cline-neutral "> </ span >
176
188
< span class ="cline-any cline-neutral "> </ span >
@@ -203,8 +215,8 @@ <h1><a href="index.html">All files</a> image-compression.js</h1>
203
215
< span class ="cline-any cline-neutral "> </ span >
204
216
< span class ="cline-any cline-neutral "> </ span >
205
217
< span class ="cline-any cline-neutral "> </ span >
206
- < span class ="cline-any cline-yes "> 15x </ span >
207
- < span class ="cline-any cline-yes "> 15x </ span >
218
+ < span class ="cline-any cline-yes "> 9x </ span >
219
+ < span class ="cline-any cline-yes "> 9x </ span >
208
220
< span class ="cline-any cline-neutral "> </ span >
209
221
< span class ="cline-any cline-neutral "> </ span >
210
222
< span class ="cline-any cline-yes "> 6x</ span >
@@ -237,6 +249,9 @@ <h1><a href="index.html">All files</a> image-compression.js</h1>
237
249
< span class ="cline-any cline-yes "> 6x</ span >
238
250
< span class ="cline-any cline-yes "> 6x</ span >
239
251
< span class ="cline-any cline-neutral "> </ span >
252
+ < span class ="cline-any cline-yes "> 6x</ span >
253
+ < span class ="cline-any cline-yes "> 6x</ span >
254
+ < span class ="cline-any cline-neutral "> </ span >
240
255
< span class ="cline-any cline-neutral "> </ span >
241
256
< span class ="cline-any cline-neutral "> </ span >
242
257
< span class ="cline-any cline-neutral "> </ span >
@@ -253,25 +268,30 @@ <h1><a href="index.html">All files</a> image-compression.js</h1>
253
268
< span class ="cline-any cline-neutral "> </ span >
254
269
< span class ="cline-any cline-yes "> 2x</ span >
255
270
< span class ="cline-any cline-yes "> 2x</ span >
256
- < span class ="cline-any cline-yes "> 9x </ span >
257
- < span class ="cline-any cline-yes "> 9x </ span >
271
+ < span class ="cline-any cline-yes "> 3x </ span >
272
+ < span class ="cline-any cline-yes "> 3x </ span >
258
273
< span class ="cline-any cline-neutral "> </ span >
259
274
< span class ="cline-any cline-neutral "> </ span >
260
- < span class ="cline-any cline-yes "> 9x </ span >
275
+ < span class ="cline-any cline-yes "> 3x </ span >
261
276
< span class ="cline-any cline-neutral "> </ span >
262
- < span class ="cline-any cline-yes "> 9x </ span >
277
+ < span class ="cline-any cline-yes "> 3x </ span >
263
278
< span class ="cline-any cline-neutral "> </ span >
264
- < span class ="cline-any cline-yes "> 9x </ span >
265
- < span class ="cline-any cline-yes "> 2x </ span >
279
+ < span class ="cline-any cline-yes "> 3x </ span >
280
+ < span class ="cline-any cline-yes "> 3x </ span >
266
281
< span class ="cline-any cline-neutral "> </ span >
267
- < span class ="cline-any cline-yes "> 9x </ span >
282
+ < span class ="cline-any cline-yes "> 3x </ span >
268
283
< span class ="cline-any cline-neutral "> </ span >
269
- < span class ="cline-any cline-yes "> 9x </ span >
284
+ < span class ="cline-any cline-yes "> 3x </ span >
270
285
< span class ="cline-any cline-neutral "> </ span >
271
- < span class ="cline-any cline-yes "> 9x </ span >
286
+ < span class ="cline-any cline-yes "> 3x </ span >
272
287
< span class ="cline-any cline-neutral "> </ span >
273
- < span class ="cline-any cline-yes "> 9x</ span >
274
- < span class ="cline-any cline-yes "> 9x</ span >
288
+ < span class ="cline-any cline-yes "> 3x</ span >
289
+ < span class ="cline-any cline-yes "> 3x</ span >
290
+ < span class ="cline-any cline-neutral "> </ span >
291
+ < span class ="cline-any cline-yes "> 2x</ span >
292
+ < span class ="cline-any cline-yes "> 1x</ span >
293
+ < span class ="cline-any cline-yes "> 1x</ span >
294
+ < span class ="cline-any cline-yes "> 1x</ span >
275
295
< span class ="cline-any cline-neutral "> </ span >
276
296
< span class ="cline-any cline-neutral "> </ span >
277
297
< span class ="cline-any cline-yes "> 2x</ span >
@@ -298,13 +318,15 @@ <h1><a href="index.html">All files</a> image-compression.js</h1>
298
318
* Compress an image file.
299
319
*
300
320
* @param {File} file
301
- * @param {Object} options - { maxSizeMB=Number.POSITIVE_INFINITY, maxWidthOrHeight, useWebWorker=false, maxIteration = 10, exifOrientation, fileType }
321
+ * @param {Object} options
302
322
* @param {number} [options.maxSizeMB=Number.POSITIVE_INFINITY]
303
323
* @param {number} [options.maxWidthOrHeight=undefined]
324
+ * @param {boolean} [options.useWebWorker=false]
304
325
* @param {number} [options.maxIteration=10]
305
326
* @param {number} [options.exifOrientation] - default to be the exif orientation from the image file
306
327
* @param {Function} [options.onProgress] - a function takes one progress argument (progress from 0 to 100)
307
328
* @param {string} [options.fileType] - default to be the original mime type from the image file
329
+ * @param {number} [options.initialQuality=1.0]
308
330
* @returns {Promise<File | Blob>}
309
331
*/
310
332
export default async function compress (file, options) {
@@ -337,14 +359,17 @@ <h1><a href="index.html">All files</a> image-compression.js</h1>
337
359
incProgress()
338
360
339
361
// exifOrientation
340
- options. exifOrientation = options.exifOrientation || < span class ="branch-1 cbranch-no " title ="branch not covered " > await getExifOrientation(file)</ span >
362
+ const exifOrientation = options.exifOrientation || < span class ="branch-1 cbranch-no " title ="branch not covered " > await getExifOrientation(file)</ span >
341
363
incProgress()
342
- const orientationFixedCanvas = (await isAutoOrientationInBrowser) ? < span class ="branch-0 cbranch-no " title ="branch not covered " > maxWidthOrHeightFixedCanvas </ span > : followExifOrientation(maxWidthOrHeightFixedCanvas, options. exifOrientation)
364
+ const orientationFixedCanvas = (await isAutoOrientationInBrowser) ? < span class ="branch-0 cbranch-no " title ="branch not covered " > maxWidthOrHeightFixedCanvas </ span > : followExifOrientation(maxWidthOrHeightFixedCanvas, exifOrientation)
343
365
incProgress()
344
366
345
- let quality = 1
367
+ let quality = options.initialQuality || 1.0
346
368
347
- let tempFile = await canvasToFile(orientationFixedCanvas, options.fileType || file.type, file.name, file.lastModified, quality)
369
+ const tempFileType = 'image/jpeg'
370
+ const outputFileType = options.fileType || file.type
371
+
372
+ let tempFile = await canvasToFile(orientationFixedCanvas, outputFileType, file.name, file.lastModified, quality)
348
373
incProgress()
349
374
350
375
const origExceedMaxSize = tempFile.size > maxSizeByte
@@ -374,10 +399,10 @@ <h1><a href="index.html">All files</a> image-compression.js</h1>
374
399
375
400
ctx.drawImage(canvas, 0, 0, newWidth, newHeight)
376
401
377
- if (file.type === 'image/jpeg') {
402
+ < span class =" missing-if-branch " title =" else path not taken " > E </ span > if (tempFileType === 'image/jpeg') {
378
403
quality *= 0.95
379
404
}
380
- compressedFile = await canvasToFile(newCanvas, options.fileType || file.type , file.name, file.lastModified, quality)
405
+ compressedFile = await canvasToFile(newCanvas, tempFileType , file.name, file.lastModified, quality)
381
406
382
407
cleanupCanvasMemory(canvas)
383
408
@@ -386,6 +411,11 @@ <h1><a href="index.html">All files</a> image-compression.js</h1>
386
411
currentSize = compressedFile.size
387
412
setProgress(Math.min(99, Math.floor((renderedSize - currentSize) / (renderedSize - maxSizeByte) * 100)))
388
413
}
414
+ if (tempFileType !== outputFileType) {
415
+ compressedFile = new Blob([compressedFile], { type: outputFileType })
416
+ compressedFile.name = file.name
417
+ compressedFile.lastModified = file.lastModified
418
+ }
389
419
390
420
cleanupCanvasMemory(canvas)
391
421
cleanupCanvasMemory(newCanvas)
@@ -403,7 +433,7 @@ <h1><a href="index.html">All files</a> image-compression.js</h1>
403
433
< div class ='footer quiet pad2 space-top1 center small '>
404
434
Code coverage generated by
405
435
< a href ="https://istanbul.js.org/ " target ="_blank "> istanbul</ a >
406
- at Thu Jun 04 2020 13:37:49 GMT+0800 (香港標準時間 )
436
+ at Sun Nov 08 2020 23:03:52 GMT+0800 (Hong Kong Standard Time )
407
437
</ div >
408
438
</ div >
409
439
< script src ="prettify.js "> </ script >
0 commit comments