Blame view

vendor/kartik-v/bootstrap-fileinput/js/plugins/canvas-to-blob.js 3.68 KB
ad2e91f7   Mihail   move multyparser ...
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
92
93
94
95
  /*
   * 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));