| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 | /* * 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;    }}(window));
 |