Blame view

framework/thirdparty/javascript-loadimage/load-image.js 3.68 KB
0084d336   Administrator   Importers CRUD
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
  /*
   * JavaScript Load Image 1.1.3
   * https://github.com/blueimp/JavaScript-Load-Image
   *
   * Copyright 2011, Sebastian Tschan
   * https://blueimp.net
   *
   * Licensed under the MIT license:
   * http://www.opensource.org/licenses/MIT
   */
  
  /*jslint nomen: true */
  /*global window, document, URL, webkitURL, Blob, FileReader, define */
  
  (function ($) {
      'use strict';
  
      // Loads an image for a given File object.
      // Invokes the callback with an img or optional canvas
      // element (if supported by the browser) as parameter:
      var loadImage = function (file, callback, options) {
              var img = document.createElement('img'),
                  url,
                  isFile;
              if (window.Blob && file instanceof Blob) {
                  url = loadImage.createObjectURL(file);
                  isFile = true;
              } else {
                  url = file;
              }
              img.onerror = callback;
              img.onload = function () {
                  if (isFile) {
                      loadImage.revokeObjectURL(url);
                  }
                  callback(loadImage.scale(img, options));
              };
              if (url) {
                  img.src = url;
                  return img;
              } else {
                  return loadImage.readFile(file, function (url) {
                      img.src = url;
                  });
              }
          },
          urlAPI = (window.createObjectURL && window) ||
              (window.URL && URL) || (window.webkitURL && webkitURL);
  
      // Scales the given image (img HTML element)
      // using the given options.
      // Returns a canvas object if the canvas option is true
      // and the browser supports canvas, else the scaled image:
      loadImage.scale = function (img, options) {
          options = options || {};
          var canvas = document.createElement('canvas'),
              scale = Math.max(
                  (options.minWidth || img.width) / img.width,
                  (options.minHeight || img.height) / img.height
              );
          if (scale > 1) {
              img.width = parseInt(img.width * scale, 10);
              img.height = parseInt(img.height * scale, 10);
          }
          scale = Math.min(
              (options.maxWidth || img.width) / img.width,
              (options.maxHeight || img.height) / img.height
          );
          if (scale < 1) {
              img.width = parseInt(img.width * scale, 10);
              img.height = parseInt(img.height * scale, 10);
          }
          if (!options.canvas || !canvas.getContext) {
              return img;
          }
          canvas.width = img.width;
          canvas.height = img.height;
          canvas.getContext('2d')
              .drawImage(img, 0, 0, img.width, img.height);
          return canvas;
      };
  
      loadImage.createObjectURL = function (file) {
          return urlAPI ? urlAPI.createObjectURL(file) : false;
      };
  
      loadImage.revokeObjectURL = function (url) {
          return urlAPI ? urlAPI.revokeObjectURL(url) : false;
      };
  
      // Loads a given File object via FileReader interface,
      // invokes the callback with a data url:
      loadImage.readFile = function (file, callback) {
          if (window.FileReader && FileReader.prototype.readAsDataURL) {
              var fileReader = new FileReader();
              fileReader.onload = function (e) {
                  callback(e.target.result);
              };
              fileReader.readAsDataURL(file);
              return fileReader;
          }
          return false;
      };
  
      if (typeof define !== 'undefined' && define.amd) {
          // Register as an AMD module:
          define('loadImage', function () {
              return loadImage;
          });
      } else {
          // Bind to the global (window) object:
          $.loadImage = loadImage;
      }
  }(this));