|
@@ -65,7 +65,11 @@ import filters from "@/filters";
|
|
import MarkDrawTrack from "./MarkDrawTrack.vue";
|
|
import MarkDrawTrack from "./MarkDrawTrack.vue";
|
|
import { ModeEnum, Track } from "@/types";
|
|
import { ModeEnum, Track } from "@/types";
|
|
import { useTimers } from "@/setups/useTimers";
|
|
import { useTimers } from "@/setups/useTimers";
|
|
-import { loadImage } from "@/utils/utils";
|
|
|
|
|
|
+import {
|
|
|
|
+ getDataUrlForSliceConfig,
|
|
|
|
+ getDataUrlForSplitConfig,
|
|
|
|
+ loadImage,
|
|
|
|
+} from "@/utils/utils";
|
|
import { groupBy, sortBy } from "lodash";
|
|
import { groupBy, sortBy } from "lodash";
|
|
// @ts-ignore
|
|
// @ts-ignore
|
|
import CustomCursor from "custom-cursor.js";
|
|
import CustomCursor from "custom-cursor.js";
|
|
@@ -110,10 +114,6 @@ export default defineComponent({
|
|
|
|
|
|
if (!markResult || !store.currentTask) return;
|
|
if (!markResult || !store.currentTask) return;
|
|
|
|
|
|
- // TODO: 图片加载出错,自动加载下一个任务
|
|
|
|
- // for (const url of store.currentTask.sliceUrls) {
|
|
|
|
- // await loadImage(filters.toCompleteUrl(url));
|
|
|
|
- // }
|
|
|
|
// 必须要先加载一遍,把“选择整图”的宽高重置后,再算总高度
|
|
// 必须要先加载一遍,把“选择整图”的宽高重置后,再算总高度
|
|
for (const sliceConfig of store.currentTask.sliceConfig) {
|
|
for (const sliceConfig of store.currentTask.sliceConfig) {
|
|
const url = filters.toCompleteUrl(
|
|
const url = filters.toCompleteUrl(
|
|
@@ -143,36 +143,18 @@ export default defineComponent({
|
|
);
|
|
);
|
|
const image = await loadImage(url);
|
|
const image = await loadImage(url);
|
|
|
|
|
|
- const canvas = document.createElement("canvas");
|
|
|
|
- // canvas.width = sliceConfig.w;
|
|
|
|
- canvas.width = Math.max(sliceConfig.w, maxSliceWidth);
|
|
|
|
- canvas.height = sliceConfig.h;
|
|
|
|
- const ctx = canvas.getContext("2d");
|
|
|
|
- if (!ctx) {
|
|
|
|
- console.log('canvas.getContext("2d") error');
|
|
|
|
- }
|
|
|
|
- // drawImage 画图软件透明色
|
|
|
|
- ctx?.drawImage(
|
|
|
|
|
|
+ const dataUrl = getDataUrlForSliceConfig(
|
|
image,
|
|
image,
|
|
- sliceConfig.x,
|
|
|
|
- sliceConfig.y,
|
|
|
|
- sliceConfig.w,
|
|
|
|
- sliceConfig.h,
|
|
|
|
- 0,
|
|
|
|
- 0,
|
|
|
|
- sliceConfig.w,
|
|
|
|
- sliceConfig.h
|
|
|
|
|
|
+ sliceConfig,
|
|
|
|
+ maxSliceWidth,
|
|
|
|
+ url
|
|
);
|
|
);
|
|
- // console.log(image, canvas.height, sliceConfig, ctx);
|
|
|
|
- // console.log(canvas.toDataURL());
|
|
|
|
|
|
+
|
|
const thisImageTrackList = markResult.trackList.filter(
|
|
const thisImageTrackList = markResult.trackList.filter(
|
|
(v) => v.offsetIndex === sliceConfig.i
|
|
(v) => v.offsetIndex === sliceConfig.i
|
|
);
|
|
);
|
|
-
|
|
|
|
- const dataUrl = canvas.toDataURL();
|
|
|
|
const sliceImage = new Image();
|
|
const sliceImage = new Image();
|
|
sliceImage.src = dataUrl;
|
|
sliceImage.src = dataUrl;
|
|
- // sliceConfig.x + sliceConfig.w
|
|
|
|
sliceImagesWithTrackList.push({
|
|
sliceImagesWithTrackList.push({
|
|
url: dataUrl,
|
|
url: dataUrl,
|
|
indexInSliceUrls: sliceConfig.i,
|
|
indexInSliceUrls: sliceConfig.i,
|
|
@@ -228,28 +210,12 @@ export default defineComponent({
|
|
|
|
|
|
accumBottomHeight += image.naturalHeight;
|
|
accumBottomHeight += image.naturalHeight;
|
|
|
|
|
|
- const width = image.naturalWidth * (config[1] - config[0]);
|
|
|
|
- const canvas = document.createElement("canvas");
|
|
|
|
- canvas.width = Math.max(width, maxSliceWidth);
|
|
|
|
- canvas.height = image.naturalHeight;
|
|
|
|
- const ctx = canvas.getContext("2d");
|
|
|
|
- if (!ctx) {
|
|
|
|
- console.log('canvas.getContext("2d") error');
|
|
|
|
- }
|
|
|
|
- // drawImage 画图软件透明色
|
|
|
|
- ctx?.drawImage(
|
|
|
|
|
|
+ const dataUrl = getDataUrlForSplitConfig(
|
|
image,
|
|
image,
|
|
- image.naturalWidth * config[0],
|
|
|
|
- 0,
|
|
|
|
- image.naturalWidth * config[1],
|
|
|
|
- image.naturalHeight,
|
|
|
|
- 0,
|
|
|
|
- 0,
|
|
|
|
- image.naturalWidth * config[1],
|
|
|
|
- image.naturalHeight
|
|
|
|
|
|
+ config,
|
|
|
|
+ maxSliceWidth,
|
|
|
|
+ url
|
|
);
|
|
);
|
|
- // console.log(image, canvas.height, sliceConfig, ctx);
|
|
|
|
- // console.log(canvas.toDataURL());
|
|
|
|
|
|
|
|
const thisImageTrackList = markResult.trackList.filter(
|
|
const thisImageTrackList = markResult.trackList.filter(
|
|
(t) =>
|
|
(t) =>
|
|
@@ -257,12 +223,10 @@ export default defineComponent({
|
|
(store.currentTask &&
|
|
(store.currentTask &&
|
|
store.currentTask.sliceUrls.indexOf(url) + 1)
|
|
store.currentTask.sliceUrls.indexOf(url) + 1)
|
|
);
|
|
);
|
|
-
|
|
|
|
- const dataUrl = canvas.toDataURL();
|
|
|
|
const sliceImage = new Image();
|
|
const sliceImage = new Image();
|
|
sliceImage.src = dataUrl;
|
|
sliceImage.src = dataUrl;
|
|
sliceImagesWithTrackList.push({
|
|
sliceImagesWithTrackList.push({
|
|
- url: canvas.toDataURL(),
|
|
|
|
|
|
+ url: dataUrl,
|
|
indexInSliceUrls: store.currentTask.sliceUrls.indexOf(url) + 1,
|
|
indexInSliceUrls: store.currentTask.sliceUrls.indexOf(url) + 1,
|
|
trackList: thisImageTrackList.filter(
|
|
trackList: thisImageTrackList.filter(
|
|
(t) =>
|
|
(t) =>
|
|
@@ -300,11 +264,6 @@ export default defineComponent({
|
|
__lock = false;
|
|
__lock = false;
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
- // console.log(markResult.trackList.length);
|
|
|
|
- // if (markResult.trackList.length !== trackLen) {
|
|
|
|
- // sliceImagesWithTrackList.splice(0);
|
|
|
|
- // trackLen = markResult.trackList.length;
|
|
|
|
- // }
|
|
|
|
|
|
|
|
// reset sliceImagesWithTrackList ,当切换任务时,要重新绘制图片和轨迹
|
|
// reset sliceImagesWithTrackList ,当切换任务时,要重新绘制图片和轨迹
|
|
// if (_studentId !== store.currentTask.studentId) {
|
|
// if (_studentId !== store.currentTask.studentId) {
|
|
@@ -323,6 +282,7 @@ export default defineComponent({
|
|
} catch (error) {
|
|
} catch (error) {
|
|
sliceImagesWithTrackList.splice(0);
|
|
sliceImagesWithTrackList.splice(0);
|
|
console.log("render error ", error);
|
|
console.log("render error ", error);
|
|
|
|
+ // 图片加载出错,自动加载下一个任务
|
|
emit("error");
|
|
emit("error");
|
|
} finally {
|
|
} finally {
|
|
__lock = false;
|
|
__lock = false;
|