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)); |