You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			96 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			JavaScript
		
	
			
		
		
	
	
			96 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			JavaScript
		
	
| /*
 | |
|  * JavaScript Canvas to Blob 2.0.5
 | |
|  * https://github.com/blueimp/JavaScript-Canvas-to-Blob
 | |
|  *
 | |
|  * Copyright 2012, Sebastian Tschan
 | |
|  * https://blueimp.net
 | |
|  *
 | |
|  * Licensed under the MIT license:
 | |
|  * http://www.opensource.org/licenses/MIT
 | |
|  *
 | |
|  * Based on stackoverflow user Stoive's code snippet:
 | |
|  * http://stackoverflow.com/q/4998908
 | |
|  */
 | |
| 
 | |
| /*jslint nomen: true, regexp: true */
 | |
| /*global window, atob, Blob, ArrayBuffer, Uint8Array, define */
 | |
| 
 | |
| (function (window) {
 | |
|     'use strict';
 | |
|     var CanvasPrototype = window.HTMLCanvasElement &&
 | |
|             window.HTMLCanvasElement.prototype,
 | |
|         hasBlobConstructor = window.Blob && (function () {
 | |
|             try {
 | |
|                 return Boolean(new Blob());
 | |
|             } catch (e) {
 | |
|                 return false;
 | |
|             }
 | |
|         }()),
 | |
|         hasArrayBufferViewSupport = hasBlobConstructor && window.Uint8Array &&
 | |
|             (function () {
 | |
|                 try {
 | |
|                     return new Blob([new Uint8Array(100)]).size === 100;
 | |
|                 } catch (e) {
 | |
|                     return false;
 | |
|                 }
 | |
|             }()),
 | |
|         BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder ||
 | |
|             window.MozBlobBuilder || window.MSBlobBuilder,
 | |
|         dataURLtoBlob = (hasBlobConstructor || BlobBuilder) && window.atob &&
 | |
|             window.ArrayBuffer && window.Uint8Array && function (dataURI) {
 | |
|                 var byteString,
 | |
|                     arrayBuffer,
 | |
|                     intArray,
 | |
|                     i,
 | |
|                     mimeString,
 | |
|                     bb;
 | |
|                 if (dataURI.split(',')[0].indexOf('base64') >= 0) {
 | |
|                     // Convert base64 to raw binary data held in a string:
 | |
|                     byteString = atob(dataURI.split(',')[1]);
 | |
|                 } else {
 | |
|                     // Convert base64/URLEncoded data component to raw binary data:
 | |
|                     byteString = decodeURIComponent(dataURI.split(',')[1]);
 | |
|                 }
 | |
|                 // Write the bytes of the string to an ArrayBuffer:
 | |
|                 arrayBuffer = new ArrayBuffer(byteString.length);
 | |
|                 intArray = new Uint8Array(arrayBuffer);
 | |
|                 for (i = 0; i < byteString.length; i += 1) {
 | |
|                     intArray[i] = byteString.charCodeAt(i);
 | |
|                 }
 | |
|                 // Separate out the mime component:
 | |
|                 mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
 | |
|                 // Write the ArrayBuffer (or ArrayBufferView) to a blob:
 | |
|                 if (hasBlobConstructor) {
 | |
|                     return new Blob(
 | |
|                         [hasArrayBufferViewSupport ? intArray : arrayBuffer],
 | |
|                         {type: mimeString}
 | |
|                     );
 | |
|                 }
 | |
|                 bb = new BlobBuilder();
 | |
|                 bb.append(arrayBuffer);
 | |
|                 return bb.getBlob(mimeString);
 | |
|             };
 | |
|     if (window.HTMLCanvasElement && !CanvasPrototype.toBlob) {
 | |
|         if (CanvasPrototype.mozGetAsFile) {
 | |
|             CanvasPrototype.toBlob = function (callback, type, quality) {
 | |
|                 if (quality && CanvasPrototype.toDataURL && dataURLtoBlob) {
 | |
|                     callback(dataURLtoBlob(this.toDataURL(type, quality)));
 | |
|                 } else {
 | |
|                     callback(this.mozGetAsFile('blob', type));
 | |
|                 }
 | |
|             };
 | |
|         } else if (CanvasPrototype.toDataURL && dataURLtoBlob) {
 | |
|             CanvasPrototype.toBlob = function (callback, type, quality) {
 | |
|                 callback(dataURLtoBlob(this.toDataURL(type, quality)));
 | |
|             };
 | |
|         }
 | |
|     }
 | |
|     if (typeof define === 'function' && define.amd) {
 | |
|         define(function () {
 | |
|             return dataURLtoBlob;
 | |
|         });
 | |
|     } else {
 | |
|         window.dataURLtoBlob = dataURLtoBlob;
 | |
|     }
 | |
| }(this));
 |