kfb-view 2.1.7 → 2.1.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/example/index.js CHANGED
@@ -1,15 +1,31 @@
1
- import {KfbView, cacheGammaTable, hslToRgb, rgbToHsl} from '../src';
1
+ import {KfbView, hslToRgb, rgbToHsl, cacheGammaTable} from '../src';
2
2
  import axios from 'axios';
3
+ import {EVENT_TAILORING_SCREENSHOT} from '../src/const/event';
3
4
 
4
- const fileName = '/upload/large_file/last/fb6f566d15cc52331e3c4f3e1794a748/T2020-00935.kfb';
5
+ const fileName = '/upload/large_file/last/2022/02/21/d31a31bf1ae5b73fca63f72e2affc879/胃镜1.kfb';
5
6
 
6
7
  const instance = axios.create({
7
8
  baseURL: '/api',
8
9
  timeout: 1000,
9
- headers: {'Authorization': 'bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvcGlzLW5pbmdiby5oenp0YWkuY29tXC9hcGlcL2F1dGhcL2xvZ2luIiwiaWF0IjoxNjMyMzYxNjQxLCJleHAiOjE2MzI5NjY0NDEsIm5iZiI6MTYzMjM2MTY0MSwianRpIjoidGlGYzBMcTRMRjQxMDNzNCIsInN1YiI6NjQsInBydiI6Ijg3ZTBhZjFlZjlmZDE1ODEyZmRlYzk3MTUzYTE0ZTBiMDQ3NTQ2YWEifQ.lwwW8vublDPm-zSbQzeY3HabRN3O0Ud7CzxF4gnlVRo'},
10
+ headers: {'Authorization': 'bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC8xOTIuMTY4LjEuOTFcL2FwaVwvYXV0aFwvbG9naW4iLCJpYXQiOjE2NDg0NTQwNjEsImV4cCI6MTY0OTA1ODg2MSwibmJmIjoxNjQ4NDU0MDYxLCJqdGkiOiJ6WXZUNnJXVzhoQTBrUTYzIiwic3ViIjoxLCJwcnYiOiI4N2UwYWYxZWY5ZmQxNTgxMmZkZWM5NzE1M2ExNGUwYjA0NzU0NmFhIn0.qMTNZvIxSVLGfh8jFTiXKBf7BQXXuz4n2cUj7Ewj6lk'},
10
11
  });
11
12
 
12
- instance.get(`/ai/kfb/info?file=${fileName}`).then(({data}) => {
13
+ let cacheImage = {};
14
+
15
+ const debounce = (func, delay) => {
16
+ let timer;
17
+ return function(...args) {
18
+ if (timer) {
19
+ clearTimeout(timer);
20
+ }
21
+ timer = setTimeout(() => {
22
+ // eslint-disable-next-line no-invalid-this,babel/no-invalid-this
23
+ func.apply(this, args);
24
+ }, delay);
25
+ };
26
+ };
27
+
28
+ instance.get(`/slide/info?file=${fileName}`).then(({data}) => {
13
29
  let params = {};
14
30
  params.file = fileName;
15
31
  const kv = new KfbView({
@@ -20,6 +36,9 @@ instance.get(`/ai/kfb/info?file=${fileName}`).then(({data}) => {
20
36
  disabled: false,
21
37
  drag: true,
22
38
  },
39
+ board: {
40
+ ROI: true,
41
+ },
23
42
  graduation: {
24
43
  right: 30,
25
44
  },
@@ -27,7 +46,7 @@ instance.get(`/ai/kfb/info?file=${fileName}`).then(({data}) => {
27
46
  disabled: false,
28
47
  height: 200,
29
48
  style: 'right: 0;top: 0',
30
- thumbnail: `/api/ai/kfb/image?file=${fileName}&type=thumbnail`,
49
+ thumbnail: `/api/slide/getImage?file=${fileName}&type=thumbnail`,
31
50
  vestige: true,
32
51
  vestigeZoom: .1,
33
52
  },
@@ -66,15 +85,24 @@ instance.get(`/ai/kfb/info?file=${fileName}`).then(({data}) => {
66
85
  },
67
86
  },
68
87
  tileDrawing(e) {
69
- const {context, rendered, sourceWidth, sourceHeight, position, size, initRendered} = e;
88
+ const {
89
+ context,
90
+ rendered,
91
+ sourceWidth,
92
+ sourceHeight,
93
+ position,
94
+ size,
95
+ initRendered,
96
+ tile,
97
+ } = e;
70
98
  let rangeA = document.querySelector('#a').value / 1;
99
+ let rangeS = document.querySelector('#s').value / 1;
100
+ let rangeL = document.querySelector('#l').value / 1;
101
+ let rangeR = document.querySelector('#r').value / 1;
102
+ let rangeG = document.querySelector('#g').value / 1;
71
103
  let rangeB = document.querySelector('#b').value / 1;
72
- let rangeC = document.querySelector('#c').value / 1;
73
- position.x = position.x >> 0;
74
- position.y = position.y >> 0;
75
- size.y = size.y >> 0;
76
- size.x = size.x >> 0;
77
- if (rangeB === 0 && rangeA === 1 && rangeC === 0) {
104
+ if (rangeB === 0 && rangeA === 1 && rangeS === 0 && rangeL === 0 &&
105
+ rangeR === 0 && rangeG === 0) {
78
106
  context.drawImage(
79
107
  rendered.canvas,
80
108
  0,
@@ -88,64 +116,67 @@ instance.get(`/ai/kfb/info?file=${fileName}`).then(({data}) => {
88
116
  );
89
117
  return;
90
118
  }
91
- const sourceLength = sourceWidth * sourceHeight;
92
- const sizeLength = size.x * size.y;
93
- const isSource = sizeLength > sourceLength;
94
- const canvas = rendered.canvas;
95
- let imageData = undefined;
96
- let length = isSource ? sourceLength : sizeLength;
97
- if (isSource) {
98
- imageData = initRendered.getImageData(0, 0, canvas.width,
99
- canvas.height);
100
- } else {
101
- const offCanvas = new OffscreenCanvas(size.x, size.y);
102
- const offCtx = offCanvas.getContext('2d');
103
- offCtx.drawImage(initRendered.canvas, 0, 0, offCanvas.width,
104
- offCanvas.height);
105
- imageData = initRendered.getImageData(0, 0, canvas.width,
119
+ if (!cacheImage[tile.url]) {
120
+ const sourceLength = sourceWidth * sourceHeight;
121
+ const canvas = rendered.canvas;
122
+ let imageData = initRendered.getImageData(0, 0, canvas.width,
106
123
  canvas.height);
107
- imageData = offCtx.getImageData(0, 0, offCanvas.width,
108
- offCanvas.height);
109
- }
110
- for (let i = 0; i < length; i++) {
111
- let r = imageData.data[i * 4 + 0];
112
- let g = imageData.data[i * 4 + 1];
113
- let b = imageData.data[i * 4 + 2];
114
-
115
- // console.log(h, s, l);
116
- if (rangeB !== 0) {
117
- let {h, s, l} = rgbToHsl(r, g, b);
118
- const rgb = hslToRgb(h, s * (1 + rangeB), l);
119
- r = rgb.r;
120
- g = rgb.g;
121
- b = rgb.b;
122
- }
123
- if (rangeA !== 1) {
124
- r = cacheGammaTable[rangeA][r >> 0];
125
- g = cacheGammaTable[rangeA][g >> 0];
126
- b = cacheGammaTable[rangeA][b >> 0];
124
+ for (let i = 0; i < sourceLength; i++) {
125
+ let r = imageData.data[i * 4 + 0];
126
+ let g = imageData.data[i * 4 + 1];
127
+ let b = imageData.data[i * 4 + 2];
128
+ if (rangeR !== 0) {
129
+ r = r * (1 + rangeR);
130
+ r = r > 255 ? 255 : r;
131
+ }
132
+ if (rangeG !== 0) {
133
+ g = g * (1 + rangeG);
134
+ g = g > 255 ? 255 : g;
135
+ }
136
+ if (rangeB !== 0) {
137
+ b = b * (1 + rangeB);
138
+ g = g > 255 ? 255 : g;
139
+ }
140
+ if (rangeS !== 0) {
141
+ let {h, s, l} = rgbToHsl(r, g, b);
142
+ const rgb = hslToRgb(h, s * (1 + rangeS), l);
143
+ r = rgb.r;
144
+ g = rgb.g;
145
+ b = rgb.b;
146
+ }
147
+ if (rangeL !== 0) {
148
+ let {h, s, l} = rgbToHsl(r, g, b);
149
+ const rgb = hslToRgb(h, s, l * (1 + rangeL));
150
+ r = rgb.r;
151
+ g = rgb.g;
152
+ b = rgb.b;
153
+ }
154
+ if (rangeA !== 1) {
155
+ r = cacheGammaTable[rangeA][r >> 0];
156
+ g = cacheGammaTable[rangeA][g >> 0];
157
+ b = cacheGammaTable[rangeA][b >> 0];
158
+ }
159
+ if (r > 255 || g > 255 || b > 255) {
160
+ console.log(r, g, b);
161
+ }
162
+ imageData.data[i * 4 + 0] = r;
163
+ imageData.data[i * 4 + 1] = g;
164
+ imageData.data[i * 4 + 2] = b;
127
165
  }
128
- imageData.data[i * 4 + 0] = r;
129
- imageData.data[i * 4 + 1] = g;
130
- imageData.data[i * 4 + 2] = b;
131
- }
132
- if (isSource) {
133
166
  rendered.putImageData(imageData, 0, 0);
134
- context.drawImage(
135
- canvas,
136
- 0,
137
- 0,
138
- sourceWidth,
139
- sourceHeight,
140
- position.x,
141
- position.y,
142
- size.x,
143
- size.y,
144
- );
145
- } else {
146
- context.putImageData(imageData, position.x, position.y);
147
- /* context.drawImage(offCanvas, position.x, position.y, size.x, size.y);*/
167
+ cacheImage[tile.url] = canvas;
148
168
  }
169
+ context.drawImage(
170
+ cacheImage[tile.url],
171
+ 0,
172
+ 0,
173
+ sourceWidth,
174
+ sourceHeight,
175
+ position.x,
176
+ position.y,
177
+ size.x,
178
+ size.y,
179
+ );
149
180
  },
150
181
  });
151
182
  /* kv.board.startDraw({
@@ -153,13 +184,16 @@ instance.get(`/ai/kfb/info?file=${fileName}`).then(({data}) => {
153
184
  });*/
154
185
  console.log(kv);
155
186
  let list = [];
156
- const rangeAEl = document.querySelector('#a');
157
- const rangeBEl = document.querySelector('#b');
158
- rangeAEl.onchange = changeRange;
159
- rangeBEl.onchange = changeRange;
187
+ document.querySelector('#a').onchange = debounce(changeRange, 500);
188
+ document.querySelector('#s').onchange = debounce(changeRange, 500);
189
+ document.querySelector('#l').onchange = debounce(changeRange, 500);
190
+ document.querySelector('#r').onchange = debounce(changeRange, 500);
191
+ document.querySelector('#g').onchange = debounce(changeRange, 500);
192
+ document.querySelector('#b').onchange = debounce(changeRange, 500);
160
193
 
161
194
  // eslint-disable-next-line no-unused-vars
162
195
  function changeRange() {
196
+ cacheImage = {};
163
197
  kv.viewer.forceRedraw();
164
198
  }
165
199
 
@@ -176,8 +210,11 @@ instance.get(`/ai/kfb/info?file=${fileName}`).then(({data}) => {
176
210
  rect.onclick = () => {
177
211
  kv.board.startDraw({
178
212
  tool: KfbView.marks.RECTANGLE,
179
- // isROI: true,
213
+ isROI: true,
180
214
  once: true,
215
+ measure: false,
216
+ resize: false,
217
+ move: false,
181
218
  });
182
219
  };
183
220
  line.onclick = () => {
@@ -258,18 +295,18 @@ instance.get(`/ai/kfb/info?file=${fileName}`).then(({data}) => {
258
295
  kv.$on(KfbView.events.EVENT_CANCEL_SELECT_LABEL, (e) => {
259
296
  // kv.board.endDraw();
260
297
  });
261
- /* const {width, height} = kv.$options;
262
- kv.rotation.init(
263
- {
264
- left: width / 2 - 100,
265
- top: height / 2 - 100,
266
- height: data.height,
267
- width: data.width,
268
- color: '#F00',
269
- });
270
- kv.$on(KfbView.events.EVENT_TAILORING_SCREENSHOT, (e) => {
271
- console.log(e.detail);
272
- });*/
298
+ const {width, height} = kv.$options;
299
+ kv.$on(KfbView.events.EVENT_TAILORING_SCREENSHOT, (e) => {
300
+ console.log(e.detail);
301
+ });
302
+ /* kv.tailoring.init(
303
+ {
304
+ left: width / 2 - 100,
305
+ top: height / 2 - 100,
306
+ height: 200,
307
+ width: 200,
308
+ color: '#F00',
309
+ });*/
273
310
  setTimeout(() => {
274
311
  // kv.destroy();
275
312
  }, 6000);