Commit 975e848f authored by Administrator's avatar Administrator

增加非产品层的点击

parent 5dea14e6
...@@ -108,8 +108,9 @@ const update_and_modify_product = reactive({ ...@@ -108,8 +108,9 @@ const update_and_modify_product = reactive({
inPaintPrompt: "", inPaintPrompt: "",
cutout_obj: <Wm.Coordinate[]>[], cutout_obj: <Wm.Coordinate[]>[],
cutout_no_obj: <Wm.Coordinate[]>[], cutout_no_obj: <Wm.Coordinate[]>[],
cutoutPart: "1",
}); });
const radio1 = ref('1')
onMounted(() => { onMounted(() => {
// 初始化task_id // 初始化task_id
...@@ -1677,6 +1678,12 @@ const showUploadAndModifyProductPicInPaintDialog = () => { ...@@ -1677,6 +1678,12 @@ const showUploadAndModifyProductPicInPaintDialog = () => {
const preview_canvas = document.getElementById('update_and_modify_product_previewCanvas') as HTMLCanvasElement; const preview_canvas = document.getElementById('update_and_modify_product_previewCanvas') as HTMLCanvasElement;
const mask_canvas = document.getElementById('update_and_modify_product_maskCanvas') as HTMLCanvasElement; const mask_canvas = document.getElementById('update_and_modify_product_maskCanvas') as HTMLCanvasElement;
const clearButton = document.getElementById('update_and_modify_product_clearButton') as HTMLButtonElement; const clearButton = document.getElementById('update_and_modify_product_clearButton') as HTMLButtonElement;
const no_obj_checkbox = document.getElementById('update_and_modify_product_noObjCheckbox') as HTMLInputElement;
const mask_canvas2 = document.getElementById('update_and_modify_product_maskCanvas2') as HTMLCanvasElement;
// 初始化非产品层
no_obj_checkbox.checked = false;
mask_canvas2.style.zIndex = '3';
if (base_canvas && preview_canvas && mask_canvas) { if (base_canvas && preview_canvas && mask_canvas) {
// 基础图 // 基础图
let base_ctx = base_canvas.getContext('2d') as CanvasRenderingContext2D; let base_ctx = base_canvas.getContext('2d') as CanvasRenderingContext2D;
...@@ -1713,32 +1720,74 @@ const showUploadAndModifyProductPicInPaintDialog = () => { ...@@ -1713,32 +1720,74 @@ const showUploadAndModifyProductPicInPaintDialog = () => {
mask_ctx.lineJoin = 'round'; // 拐点为圆形,默认是尖角 mask_ctx.lineJoin = 'round'; // 拐点为圆形,默认是尖角
mask_ctx.globalCompositeOperation = 'copy'; mask_ctx.globalCompositeOperation = 'copy';
// 非产品层mask
let mask_ctx2 = mask_canvas2.getContext('2d') as CanvasRenderingContext2D;
mask_ctx2.clearRect(0, 0, mask_canvas2.width, mask_canvas2.height);
mask_ctx2.lineWidth = 40; // 设置线条粗细
mask_ctx2.strokeStyle = 'rgba(255, 0, 0, 1)'; // 设置线条颜色
mask_ctx2.lineCap = 'round'; // 线头尾为圆形
mask_ctx2.lineJoin = 'round'; // 拐点为圆形,默认是尖角
mask_ctx2.globalCompositeOperation = 'copy';
if (!if_binded_events) { if (!if_binded_events) {
// 鼠标或触摸事件开始绘制 // 点选产品事件
mask_canvas.addEventListener('mousedown', startDrawing); mask_canvas.addEventListener('mousedown', onClickObj);
// 清除按钮点击事件 // 重置按钮点击事件
clearButton.addEventListener('click', clearCanvas); clearButton.addEventListener('click', resetCanvas);
// 复选框事件
no_obj_checkbox.addEventListener('click', onClickNoObjCheckbox);
// 点选非产品事件
mask_canvas2.addEventListener('mousedown', onClickNoObj);
// 每次打开都会再绑定一次,这里防止多次绑定,否则数据会重复 // 每次打开都会再绑定一次,这里防止多次绑定,否则数据会重复
if_binded_events = true; if_binded_events = true;
} }
// 开始绘制 // 点选产品
function startDrawing(e: any) { function onClickObj(e: any) {
// isDrawing = true;
mask_ctx.beginPath(); mask_ctx.beginPath();
const { offsetX, offsetY } = getOffset(e); const { offsetX, offsetY } = getOffset(e);
mask_ctx.moveTo(offsetX, offsetY); mask_ctx.moveTo(offsetX, offsetY);
mask_ctx.lineTo(offsetX, offsetY); mask_ctx.lineTo(offsetX, offsetY);
mask_ctx.stroke(); mask_ctx.stroke();
console.log(offsetX, offsetY); console.log('obj==>', offsetX, offsetY);
// 清空再push,保证里面只有一个点 // 清空再push,保证里面只有一个点
update_and_modify_product.cutout_obj = <Wm.Coordinate[]>[]; update_and_modify_product.cutout_obj = <Wm.Coordinate[]>[];
update_and_modify_product.cutout_obj.push({x: offsetX, y: offsetY}) update_and_modify_product.cutout_obj.push({x: offsetX, y: offsetY})
} }
// 清除画布
function clearCanvas() { // 点选产品
mask_ctx.clearRect(0, 0, mask_canvas.width, mask_canvas.height); function onClickNoObj(e: any) {
mask_ctx2.beginPath();
const { offsetX, offsetY } = getOffset(e);
mask_ctx2.moveTo(offsetX, offsetY);
mask_ctx2.lineTo(offsetX, offsetY);
mask_ctx2.stroke();
console.log('no-obj==>', offsetX, offsetY);
// 先清空再push,保证里面只有一个点
update_and_modify_product.cutout_no_obj = <Wm.Coordinate[]>[];
update_and_modify_product.cutout_no_obj.push({x: offsetX, y: offsetY})
}
// 重置
function resetCanvas() {
update_and_modify_product.pic_preview = '';
update_and_modify_product.pic_preview_local = '';
update_and_modify_product.inPaintVisible = false; // 关闭对话框
showUploadAndModifyProductPicInPaintDialog(); // 再打开对话框进行预览
}
// checkbox点击事件
function onClickNoObjCheckbox() {
if(no_obj_checkbox.checked) {
mask_canvas2.style.zIndex = '5';
} else {
mask_canvas2.style.zIndex = '3';
}
const computedStyle = window.getComputedStyle(mask_canvas2);
const currentZIndex = computedStyle.getPropertyValue('z-index');
console.log('Current z-index:', currentZIndex);
} }
// 获取鼠标的偏移量 // 获取鼠标的偏移量
function getOffset(e: any) { function getOffset(e: any) {
// console.log(e) // console.log(e)
...@@ -1767,7 +1816,7 @@ const onSubmitUploadAndModifyProductPicCutOut = async () => { ...@@ -1767,7 +1816,7 @@ const onSubmitUploadAndModifyProductPicCutOut = async () => {
} }
if (update_and_modify_product.cutout_obj.length==0) { if (update_and_modify_product.cutout_obj.length==0) {
ElMessage({ ElMessage({
message: "没有产品坐标,请在图片上点击产品!", message: "没有产品坐标,至少要点击产品!",
type: "error", type: "error",
}); });
return; return;
...@@ -1809,7 +1858,6 @@ const onSubmitUploadAndModifyProductPicCutOut = async () => { ...@@ -1809,7 +1858,6 @@ const onSubmitUploadAndModifyProductPicCutOut = async () => {
} finally { } finally {
update_and_modify_product.inPaintVisible = false; // 关闭对话框 update_and_modify_product.inPaintVisible = false; // 关闭对话框
showUploadAndModifyProductPicInPaintDialog(); // 再打开对话框进行预览 showUploadAndModifyProductPicInPaintDialog(); // 再打开对话框进行预览
// update_and_modify_product.inPaintVisible = true;
} }
} }
...@@ -2781,7 +2829,11 @@ const onSubmitUploadAndModifyProductPicInPaint = async () => { ...@@ -2781,7 +2829,11 @@ const onSubmitUploadAndModifyProductPicInPaint = async () => {
:close-on-press-escape="true" :close-on-press-escape="true"
:lock-scroll="true" :lock-scroll="true"
> >
<div style="color: red">请在图片上点击产品部分</div> <div style="color: red">
先在图片上点击产品部分 ==> 点击智能抠图,预览效果 ==> 如效果不理想,则勾选此项
<input type="checkbox" id="update_and_modify_product_noObjCheckbox" />
,再点击非产品部分,抠图,直到满意。
</div>
<div <div
ref="update_and_modify_product_inpaint" ref="update_and_modify_product_inpaint"
:style=" :style="
...@@ -2805,19 +2857,19 @@ const onSubmitUploadAndModifyProductPicInPaint = async () => { ...@@ -2805,19 +2857,19 @@ const onSubmitUploadAndModifyProductPicInPaint = async () => {
style="position: absolute; left: 0; top: 0; z-index: 2; background: none" style="position: absolute; left: 0; top: 0; z-index: 2; background: none"
></canvas> ></canvas>
<canvas <canvas
id="update_and_modify_product_maskCanvas" id="update_and_modify_product_maskCanvas2"
:width="form.img_size.width" :width="form.img_size.width"
:height="form.img_size.height" :height="form.img_size.height"
style="position: absolute; left: 0; top: 0; z-index: 3; background: none" style="position: absolute; left: 0; top: 0; z-index: 3; background: none"
></canvas> ></canvas>
<!-- <canvas <canvas
id="update_and_modify_product_mask2Canvas" id="update_and_modify_product_maskCanvas"
:width="form.img_size.width" :width="form.img_size.width"
:height="form.img_size.height" :height="form.img_size.height"
style="position: absolute; left: 0; top: 0; z-index: 4; background: none" style="position: absolute; left: 0; top: 0; z-index: 4; background: none"
></canvas> --> ></canvas>
</div> </div>
<button id="update_and_modify_product_clearButton">清除坐标</button> <button id="update_and_modify_product_clearButton">重置</button>
<el-button @click="onSubmitUploadAndModifyProductPicCutOut">智能抠图</el-button> <el-button @click="onSubmitUploadAndModifyProductPicCutOut">智能抠图</el-button>
<div> <div>
<span>画面描述:</span> <span>画面描述:</span>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment