From 22ee9c6cf15a855399cc0f5626436ccdcce4a3f2 Mon Sep 17 00:00:00 2001 From: bighuixiang <472705331@qq.com> Date: Fri, 18 Jul 2025 01:28:31 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=EF=BC=8C=E6=B8=85=E9=99=A4=E9=80=89=E4=B8=AD?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E4=BB=A5=E9=81=BF=E5=85=8D=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E9=97=AE=E9=A2=98=EF=BC=8C=E8=B0=83=E6=95=B4=E8=A3=81=E5=89=AA?= =?UTF-8?q?=E8=B7=AF=E5=BE=84=E4=BB=A5=E4=BF=9D=E6=8C=81=E5=87=86=E7=A1=AE?= =?UTF-8?q?=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Canvas/CanvasEditor/managers/CanvasManager.js | 3 +++ .../Canvas/CanvasEditor/managers/ExportManager.js | 3 ++- .../Canvas/CanvasEditor/utils/selectionToImage.js | 11 +++++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/component/Canvas/CanvasEditor/managers/CanvasManager.js b/src/component/Canvas/CanvasEditor/managers/CanvasManager.js index 76c2307e..14d2b2b9 100644 --- a/src/component/Canvas/CanvasEditor/managers/CanvasManager.js +++ b/src/component/Canvas/CanvasEditor/managers/CanvasManager.js @@ -776,6 +776,9 @@ export class CanvasManager { } try { + // 如果当前有选中对象,先清除选中状态 否则导出有问题 + this.canvas.discardActiveObject(); // 清除选中状态 + this.canvas.renderAll(); // 重新渲染画布 // 自动设置红绿图模式相关参数 const enhancedOptions = { ...options, diff --git a/src/component/Canvas/CanvasEditor/managers/ExportManager.js b/src/component/Canvas/CanvasEditor/managers/ExportManager.js index f09fa123..9e9dc282 100644 --- a/src/component/Canvas/CanvasEditor/managers/ExportManager.js +++ b/src/component/Canvas/CanvasEditor/managers/ExportManager.js @@ -263,7 +263,8 @@ export class ExportManager { // 递归收集子图层的对象 if (layer.children && layer.children.length > 0) { - for (const childLayer of layer.children) { + for (let i = layer.children.length - 1; i >= 0; i--) { + const childLayer = layer.children[i]; const childObjects = this._collectObjectsFromLayer(childLayer); realObjects.push(...childObjects); } diff --git a/src/component/Canvas/CanvasEditor/utils/selectionToImage.js b/src/component/Canvas/CanvasEditor/utils/selectionToImage.js index 771cc724..b0b3b7f6 100644 --- a/src/component/Canvas/CanvasEditor/utils/selectionToImage.js +++ b/src/component/Canvas/CanvasEditor/utils/selectionToImage.js @@ -805,6 +805,17 @@ const renderContentToImage = async ({ fabricObjects, selectionBounds, qualityMul evented: false, }); + // 如果有裁剪路径,也需要调整裁剪路径 + if (clonedObj.clipPath) { + clonedObj.clipPath.set({ + left: (clonedObj.clipPath.left - selectionBounds.left) * qualityMultiplier, + top: (clonedObj.clipPath.top - selectionBounds.top) * qualityMultiplier, + scaleX: (clonedObj.clipPath.scaleX || 1) * qualityMultiplier, + scaleY: (clonedObj.clipPath.scaleY || 1) * qualityMultiplier, + }); + clonedObj.clipPath.setCoords(); // 更新裁剪路径坐标 + } + contentCanvas.add(clonedObj); }