深度画布bug
This commit is contained in:
@@ -259,4 +259,41 @@ export function traceImageContour(canvas) {
|
||||
);
|
||||
|
||||
return contour;
|
||||
}
|
||||
}
|
||||
|
||||
/** 裁剪画布透明像素 */
|
||||
export function clipCanvasTransparent(canvas) {
|
||||
const ctx = canvas.getContext("2d", { willReadFrequently: true });
|
||||
const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
|
||||
const data = imageData.data;
|
||||
const width = canvas.width;
|
||||
const height = canvas.height;
|
||||
var minX = width;
|
||||
var minY = height;
|
||||
var maxX = 0;
|
||||
var maxY = 0;
|
||||
for (let y = 0; y < height; y++) {
|
||||
for (let x = 0; x < width; x++) {
|
||||
const index = (y * width + x) * 4;
|
||||
if (data[index + 3] > 0) {
|
||||
if (x < minX) minX = x;
|
||||
if (y < minY) minY = y;
|
||||
if (x > maxX) maxX = x;
|
||||
if (y > maxY) maxY = y;
|
||||
}
|
||||
}
|
||||
}
|
||||
const newCanvas = document.createElement("canvas");
|
||||
newCanvas.width = maxX - minX + 1;
|
||||
newCanvas.height = maxY - minY + 1;
|
||||
const newCtx = newCanvas.getContext("2d");
|
||||
newCtx.drawImage(canvas, minX, minY, maxX - minX + 1, maxY - minY + 1, 0, 0, maxX - minX + 1, maxY - minY + 1);
|
||||
return {
|
||||
minX,
|
||||
minY,
|
||||
maxX,
|
||||
maxY,
|
||||
canvas: newCanvas,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,16 @@
|
||||
import { fabric } from 'fabric-with-all'
|
||||
import { createStaticCanvas } from './canvasFactory'
|
||||
import { getObjectsBoundingBox, cloneObjects } from './canvasMethod'
|
||||
/** 导出画布为图片 */
|
||||
export async function exportCanvasToImage(canvas) {
|
||||
/** 导出画布为图片
|
||||
* @param {fabric.Canvas} canvas - 画布对象
|
||||
* @param {boolean} isDisscar - 是否丢弃选中对象
|
||||
* @returns {Promise<string>} - 图片URL
|
||||
*/
|
||||
export async function exportCanvasToImage(canvas, isDisscar = true) {
|
||||
if (isDisscar) {
|
||||
canvas.discardActiveObject()
|
||||
canvas.renderAll()
|
||||
}
|
||||
const clonedObjects = await cloneObjects(canvas.getObjects())
|
||||
const staticCanvas = createStaticCanvas(document.createElement('canvas'))
|
||||
const width = canvas.clipPath.width
|
||||
|
||||
Reference in New Issue
Block a user