红绿图导出问题

This commit is contained in:
李志鹏
2026-04-13 11:20:26 +08:00
parent f16aa6ea14
commit c6b1bdbdf1
4 changed files with 1074 additions and 1067 deletions

View File

@@ -55,6 +55,7 @@ commandManager.setChangeCallback((info) => {
emit("undo-redo-status-changed", {
canUndo: canUndo.value,
canRedo: canRedo.value,
type: info.type,
commandManager,
});
});

View File

@@ -907,7 +907,8 @@
}
emit("changeCanvas", commandData)
canvasManager.changeCanvas()
if ((command.canUndo || command.canRedo) && props.enabledRedGreenMode) {
const type = command.type
if (props.enabledRedGreenMode && (type === "undo" || type === "redo")) {
setTimeout(async () => {
try {
const imageData = await canvasManager.exportImage({
@@ -1057,7 +1058,7 @@
} = {}) => {
loading.value = true
canvasManager?.canvas?.discardActiveObject()
if(isFrontBackUpdata)await canvasManager?.changeCanvas()
if (isFrontBackUpdata) await canvasManager?.changeCanvas()
var base64 = await canvasManager.exportImage({
isContainBg,
isContainFixed,

View File

@@ -606,7 +606,9 @@ export class ExportManager {
imageSmoothingEnabled: true,
});
// tempFabricCanvas.setZoom(1);
console.log("==========", fixedLayerObject)
const ox = fixedLayerObject.left - fixedLayerObject.width * fixedLayerObject.scaleX / 2
const oy = fixedLayerObject.top - fixedLayerObject.height * fixedLayerObject.scaleY / 2
console.log("==========", fixedLayerObject, ox, oy)
try {
// 克隆并添加所有对象到临时画布,需要调整位置相对于固定图层
for (let i = 0; i < objectsToExport.length; i++) {
@@ -616,15 +618,16 @@ export class ExportManager {
restoreOpacityInRedGreen && true
);
if (cloned) {
let scaleX = cloned.scaleX / fixedLayerObject.scaleX
let scaleY = cloned.scaleY / fixedLayerObject.scaleY
let top = (cloned.top - oy) * scaleY
let left = (cloned.left - ox) * scaleX
cloned.set({
left: canvasWidth / 2,
top: canvasHeight / 2,
scaleX: cloned.scaleX / fixedLayerObject.scaleX,
scaleY: cloned.scaleY / fixedLayerObject.scaleY,
originX: "center",
originY: "center",
left: left,
top: top,
scaleX: scaleX,
scaleY: scaleY,
});
console.log("==========", {...cloned})
// 更新对象坐标
cloned.setCoords();
tempFabricCanvas.add(cloned);

View File

@@ -180,7 +180,7 @@ export class CommandManager {
this._recordPerformance("execute", command.constructor.name, duration);
// 通知状态变化
this._notifyStateChange();
this._notifyStateChange("execute");
console.log(`✅ 命令执行成功: ${command.constructor.name}`);
return result;
@@ -219,7 +219,7 @@ export class CommandManager {
this._recordPerformance("undo", command.constructor.name, duration);
// 通知状态变化
this._notifyStateChange();
this._notifyStateChange("undo");
console.log(`✅ 命令撤销成功: ${command.constructor.name}`);
return result;
@@ -258,7 +258,7 @@ export class CommandManager {
this._recordPerformance("redo", command.constructor.name, duration);
// 通知状态变化
this._notifyStateChange();
this._notifyStateChange("redo");
console.log(`✅ 命令重做成功: ${command.constructor.name}`);
return result;
@@ -298,7 +298,7 @@ export class CommandManager {
this.undoStack = [];
this.redoStack = [];
this._notifyStateChange();
this._notifyStateChange("clear");
// console.log("📝 命令历史已清空");
}
@@ -417,10 +417,12 @@ export class CommandManager {
* 通知状态变化
* @private
*/
_notifyStateChange() {
_notifyStateChange(type) {
if (this.onStateChange) {
try {
this.onStateChange(this.getState());
const obj = this.getState();
obj.type = type;
this.onStateChange(obj);
} catch (error) {
console.error("状态变化回调执行失败:", error);
}