UNPKG

2.76 kBJavaScriptView Raw
1(function (global, factory) {
2 if (typeof define === "function" && define.amd) {
3 define(["exports"], factory);
4 } else if (typeof exports !== "undefined") {
5 factory(exports);
6 } else {
7 var mod = {
8 exports: {}
9 };
10 factory(mod.exports);
11 global.imageReader = mod.exports;
12 }
13})(this, function (exports) {
14 "use strict";
15
16 Object.defineProperty(exports, "__esModule", {
17 value: true
18 });
19
20 exports.default = function (global) {
21 /**
22 * Constructor
23 * @param{*} [Array]files 图片文件
24 * @param{*} [Boolean]isWebWorker 是否为webwork模式调用
25 * @param{*} [Number]size 单张图片大小限制
26 * @param{*} [Function]complete 非webwork模式时 回调 res { errorCode: '0', file, dataUrl }
27 */
28 function ImageReader(options) {
29 /* istanbul ignore if */
30 if (!options.files) {
31 return;
32 }
33
34 this.files = options.files;
35 this.index = 0;
36 this.size = options.size || 0;
37
38 if (!options.isWebWorker && options.complete) {
39 this.callback = options.complete;
40 }
41
42 this.readImage(options.files[this.index]);
43 }
44
45 ImageReader.prototype.readImage = function (file) {
46 var _this = this;
47
48 // iterator
49 var next = this.files && this.index < this.files.length - 1 ? function () {
50 _this.index += 1;
51 _this.readImage(_this.files[_this.index]);
52 } : null;
53
54 var onReadImageComplete = function onReadImageComplete() {
55 var msg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
56
57 /* istanbul ignore else */
58 if (_this.callback) {
59 _this.callback(msg);
60 } else {
61 postMessage(msg);
62 }
63 next && next();
64 };
65
66 if (!this.size || file.size <= this.size) {
67 var reader = new FileReader();
68
69 reader.onload = function (readerEvt) {
70 var dataUrl = readerEvt.target.result;
71 onReadImageComplete({ errorCode: 0, file: file, dataUrl: dataUrl });
72 };
73 reader.onerror = function () {
74 /* istanbul ignore next */
75 onReadImageComplete({ errorCode: 102 });
76 };
77
78 reader.readAsDataURL(file);
79 } else {
80 onReadImageComplete({ errorCode: 101 });
81 }
82 };
83
84 var onmessageCallback = function onmessageCallback(workerEvt) {
85 var imageReader = new ImageReader(workerEvt.data);
86 return imageReader;
87 };
88
89 if (global) {
90 return function (data) {
91 return onmessageCallback({ data: data });
92 };
93 } else {
94 /* global onmessage */
95 /* eslint no-unused-vars: 0 */
96 /* eslint no-global-assign: 0 */
97 /* istanbul ignore next */
98 onmessage = onmessageCallback;
99 }
100 };
101});
\No newline at end of file