解决画布打开图片导出图片分辨率不一值问题
This commit is contained in:
@@ -21,6 +21,7 @@ export const createRasterizedImage = async ({
|
||||
preserveOriginalQuality = true, // 是否保持原始质量(新增)
|
||||
selectionManager = null, // 选区管理器,用于获取羽化值等设置
|
||||
restoreOpacityInRedGreen, // 是否在红绿图模式下恢复透明度
|
||||
isEnhanceImg, // 是否是增强图片
|
||||
} = {}) => {
|
||||
try {
|
||||
console.log(`📊 开始栅格化 ${fabricObjects.length} 个对象`);
|
||||
@@ -41,6 +42,7 @@ export const createRasterizedImage = async ({
|
||||
clippingObject,
|
||||
isReturenDataURL,
|
||||
selectionManager, // 传递选区管理器
|
||||
isEnhanceImg, // 是否是增强图片
|
||||
});
|
||||
}
|
||||
|
||||
@@ -81,6 +83,7 @@ const createClippedObjects = async ({
|
||||
clippingObject,
|
||||
isReturenDataURL,
|
||||
selectionManager = null, // 新增选区管理器参数
|
||||
isEnhanceImg, // 是否是增强图片
|
||||
}) => {
|
||||
try {
|
||||
console.log("🎯 使用新的图像遮罩裁剪方法创建对象");
|
||||
@@ -110,6 +113,7 @@ const createClippedObjects = async ({
|
||||
clippingObject,
|
||||
selectionBounds: optimizedBounds, // 使用优化后的边界框
|
||||
featherAmount,
|
||||
isEnhanceImg, // 是否是增强图片
|
||||
});
|
||||
}
|
||||
|
||||
@@ -120,6 +124,7 @@ const createClippedObjects = async ({
|
||||
clippingObject,
|
||||
selectionBounds: optimizedBounds, // 使用优化后的边界框
|
||||
featherAmount,
|
||||
isEnhanceImg, // 是否是增强图片
|
||||
});
|
||||
|
||||
// 将DataURL转换为fabric.Image对象
|
||||
@@ -173,6 +178,7 @@ const createClippedDataURLByCanvas = async ({
|
||||
clippingObject,
|
||||
selectionBounds,
|
||||
featherAmount = 0,
|
||||
isEnhanceImg = false, // 是否是增强图片
|
||||
}) => {
|
||||
try {
|
||||
console.log("🖼️ 使用图像遮罩裁剪方法生成DataURL");
|
||||
@@ -185,7 +191,9 @@ const createClippedDataURLByCanvas = async ({
|
||||
|
||||
// 使用高分辨率以保证质量
|
||||
const pixelRatio = window.devicePixelRatio || 1;
|
||||
const qualityMultiplier = Math.max(2, pixelRatio);
|
||||
const qualityMultiplier = !!isEnhanceImg ? Math.max(2, pixelRatio) : 1;
|
||||
|
||||
console.log("使用高分辨率以保证质量:" + isEnhanceImg, optimizedBounds);
|
||||
|
||||
const canvasWidth = Math.ceil(optimizedBounds.width * qualityMultiplier);
|
||||
const canvasHeight = Math.ceil(optimizedBounds.height * qualityMultiplier);
|
||||
@@ -455,6 +463,8 @@ const createLegacyRasterization = async ({
|
||||
quality,
|
||||
format,
|
||||
isReturenDataURL,
|
||||
isCropByBg, // 是否根据背景裁剪
|
||||
isEnhanceImg, // 是否是增强图片
|
||||
}) => {
|
||||
console.log("⚠️ 使用兼容的离屏渲染方法");
|
||||
|
||||
@@ -481,6 +491,8 @@ const createLegacyRasterization = async ({
|
||||
format,
|
||||
currentZoom,
|
||||
isReturenDataURL,
|
||||
isCropByBg, // 是否根据背景裁剪
|
||||
isEnhanceImg, // 是否是增强图片
|
||||
});
|
||||
};
|
||||
|
||||
@@ -571,6 +583,8 @@ const createOffscreenRasterization = async ({
|
||||
format,
|
||||
currentZoom,
|
||||
isReturenDataURL,
|
||||
isCropByBg, // 是否根据背景裁剪
|
||||
isEnhanceImg, // 是否是增强图片
|
||||
}) => {
|
||||
try {
|
||||
// 创建离屏画布,使用绝对尺寸以保证高质量
|
||||
|
||||
Reference in New Issue
Block a user