UNPKG

3.21 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6/*
7 * JavaScript Canvas to Blob
8 * https://github.com/blueimp/JavaScript-Canvas-to-Blob
9 *
10 * Copyright 2012, Sebastian Tschan
11 * https://blueimp.net
12 *
13 * Licensed under the MIT license:
14 * http://www.opensource.org/licenses/MIT
15 *
16 * Based on stackoverflow user Stoive's code snippet:
17 * http://stackoverflow.com/q/4998908
18 */
19/* global atob, Blob, define */
20var CanvasPrototype = window.HTMLCanvasElement && window.HTMLCanvasElement.prototype;
21var hasBlobConstructor = window.Blob && function () {
22 try {
23 return Boolean(new Blob());
24 } catch (e) {
25 return false;
26 }
27}();
28var hasArrayBufferViewSupport = hasBlobConstructor && window.Uint8Array && function () {
29 try {
30 return new Blob([new Uint8Array(100)]).size === 100;
31 } catch (e) {
32 return false;
33 }
34}();
35var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder;
36var dataURIPattern = /^data:((.*?)(;charset=.*?)?)(;base64)?,/;
37var dataURLtoBlob = (hasBlobConstructor || BlobBuilder) && window.atob && window.ArrayBuffer && window.Uint8Array && function (dataURI) {
38 var matches, mediaType, isBase64, dataString, byteString, arrayBuffer, intArray, i, bb;
39 // Parse the dataURI components as per RFC 2397
40 matches = dataURI.match(dataURIPattern);
41 if (!matches) {
42 throw new Error('invalid data URI');
43 }
44 // Default to text/plain;charset=US-ASCII
45 mediaType = matches[2] ? matches[1] : 'text/plain' + (matches[3] || ';charset=US-ASCII');
46 isBase64 = !!matches[4];
47 dataString = dataURI.slice(matches[0].length);
48 if (isBase64) {
49 // Convert base64 to raw binary data held in a string:
50 byteString = atob(dataString);
51 } else {
52 // Convert base64/URLEncoded data component to raw binary:
53 byteString = decodeURIComponent(dataString);
54 }
55 // Write the bytes of the string to an ArrayBuffer:
56 arrayBuffer = new ArrayBuffer(byteString.length);
57 intArray = new Uint8Array(arrayBuffer);
58 for (i = 0; i < byteString.length; i += 1) {
59 intArray[i] = byteString.charCodeAt(i);
60 }
61 // Write the ArrayBuffer (or ArrayBufferView) to a blob:
62 if (hasBlobConstructor) {
63 return new Blob([hasArrayBufferViewSupport ? intArray : arrayBuffer], { type: mediaType });
64 }
65 bb = new BlobBuilder();
66 bb.append(arrayBuffer);
67 return bb.getBlob(mediaType);
68};
69if (window.HTMLCanvasElement && !CanvasPrototype.toBlob) {
70 if (CanvasPrototype.mozGetAsFile) {
71 CanvasPrototype.toBlob = function (callback, type, quality) {
72 if (quality && CanvasPrototype.toDataURL && dataURLtoBlob) {
73 callback(dataURLtoBlob(this.toDataURL(type, quality)));
74 } else {
75 callback(this.mozGetAsFile('blob', type));
76 }
77 };
78 } else if (CanvasPrototype.toDataURL && dataURLtoBlob) {
79 CanvasPrototype.toBlob = function (callback, type, quality) {
80 callback(dataURLtoBlob(this.toDataURL(type, quality)));
81 };
82 }
83}
84exports["default"] = dataURLtoBlob;
85module.exports = exports['default'];
\No newline at end of file