30 lines
		
	
	
	
		
			861 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			30 lines
		
	
	
	
		
			861 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import 'core-js/features/object/assign';
 | |
| import 'core-js/features/object/values';
 | |
| import 'core-js/features/symbol';
 | |
| import 'core-js/features/promise/finally';
 | |
| import { decode as decodeBase64 } from '../utils/base64';
 | |
| 
 | |
| if (!Object.hasOwn(HTMLCanvasElement.prototype, 'toBlob')) {
 | |
|   const BASE64_MARKER = ';base64,';
 | |
| 
 | |
|   Object.defineProperty(HTMLCanvasElement.prototype, 'toBlob', {
 | |
|     value: function (
 | |
|       this: HTMLCanvasElement,
 | |
|       callback: BlobCallback,
 | |
|       type = 'image/png',
 | |
|       quality: unknown,
 | |
|     ) {
 | |
|       const dataURL: string = this.toDataURL(type, quality);
 | |
|       let data;
 | |
| 
 | |
|       if (dataURL.includes(BASE64_MARKER)) {
 | |
|         const [, base64] = dataURL.split(BASE64_MARKER);
 | |
|         data = decodeBase64(base64);
 | |
|       } else {
 | |
|         [, data] = dataURL.split(',');
 | |
|       }
 | |
| 
 | |
|       callback(new Blob([data], { type }));
 | |
|     },
 | |
|   });
 | |
| }
 |