Blame view

static/plugins/webshim-gh-pages/js-webshim/dev/shims/canvas-blob.js 2.79 KB
831eac332   zhuzhenchao   add file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
  /*
   * 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)));
  			};
  		}
  	}
  	window.dataURLtoBlob = dataURLtoBlob;
  }(this));
  
  webshim.isReady('canvas-blob', true);