Skip to content

Commit 8ab1c6a

Browse files
committed
add possible Canvas.toBlob for canvasToFile function
1 parent 6b6d85d commit 8ab1c6a

File tree

1 file changed

+28
-10
lines changed

1 file changed

+28
-10
lines changed

lib/utils.js

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -139,11 +139,14 @@ export async function drawFileInCanvas (file) {
139139
*/
140140
export async function canvasToFile (canvas, fileType, fileName, fileLastModified, quality = 1) {
141141
let file
142-
if (typeof OffscreenCanvas === 'function' && canvas instanceof OffscreenCanvas) {
142+
if (typeof OffscreenCanvas === 'function' && canvas instanceof OffscreenCanvas) { // checked on Win Chrome 83, MacOS Chrome 83
143143
file = await canvas.convertToBlob({ type: fileType, quality })
144144
file.name = fileName
145145
file.lastModified = fileLastModified
146-
} else {
146+
// some browser do not support quality parameter, see: https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob
147+
// } else if (typeof canvas.toBlob === 'function') {
148+
// file = await new Promise(resolve => canvas.toBlob(resolve, fileType, quality))
149+
} else { // checked on Win Edge 44, Win IE 11, Win Firefox 76, MacOS Firefox 77, MacOS Safari 13.1
147150
const dataUrl = canvas.toDataURL(fileType, quality)
148151
file = await getFilefromDataUrl(dataUrl, fileName, fileLastModified)
149152
}
@@ -257,14 +260,29 @@ export function followExifOrientation (canvas, exifOrientation) {
257260

258261
// transform context before drawing image
259262
switch (exifOrientation) {
260-
case 2: ctx.transform(-1, 0, 0, 1, width, 0); break;
261-
case 3: ctx.transform(-1, 0, 0, -1, width, height); break;
262-
case 4: ctx.transform(1, 0, 0, -1, 0, height); break;
263-
case 5: ctx.transform(0, 1, 1, 0, 0, 0); break;
264-
case 6: ctx.transform(0, 1, -1, 0, height, 0); break;
265-
case 7: ctx.transform(0, -1, -1, 0, height, width); break;
266-
case 8: ctx.transform(0, -1, 1, 0, 0, width); break;
267-
default: break;
263+
case 2:
264+
ctx.transform(-1, 0, 0, 1, width, 0)
265+
break
266+
case 3:
267+
ctx.transform(-1, 0, 0, -1, width, height)
268+
break
269+
case 4:
270+
ctx.transform(1, 0, 0, -1, 0, height)
271+
break
272+
case 5:
273+
ctx.transform(0, 1, 1, 0, 0, 0)
274+
break
275+
case 6:
276+
ctx.transform(0, 1, -1, 0, height, 0)
277+
break
278+
case 7:
279+
ctx.transform(0, -1, -1, 0, height, width)
280+
break
281+
case 8:
282+
ctx.transform(0, -1, 1, 0, 0, width)
283+
break
284+
default:
285+
break
268286
}
269287

270288
ctx.drawImage(canvas, 0, 0, width, height)

0 commit comments

Comments
 (0)