修复图片编辑器下载和图像拓展错误处理
Some checks failed
Lint / build (20) (push) Has been cancelled
Playwright Tests / test (push) Has been cancelled

- 改进下载逻辑,支持多种缩略图URL格式转换(-thumb-、-thumb.、/thumb/等)
- 添加二次转换逻辑,确保正确转换为原图URL
- 修复图像拓展错误处理,正确显示错误信息
- 添加详细调试日志,帮助定位问题
- 确保抠图和变清晰功能正确下载原图
This commit is contained in:
Your Name 2025-12-30 18:17:45 +08:00
parent dbf10c1d02
commit 9d40b78ea5

View File

@ -464,11 +464,17 @@ export function ImageAnnotator({ imageUrl, onConfirm, onCancel, initialResizeMod
if (result.success && result.image_base64) {
// 保存处理后的图片URL和Base64(优先使用original_url,确保下载的是原图)
console.log("[抠图] API返回结果:", {
hasOriginalUrl: !!result.original_url,
hasThumbnailUrl: !!result.thumbnail_url,
originalUrl: result.original_url?.substring(0, 100),
thumbnailUrl: result.thumbnail_url?.substring(0, 100)
});
if (result.original_url) {
console.log("[抠图] 原图URL:", result.original_url);
console.log("[抠图] ✅ 使用原图URL:", result.original_url);
setProcessedImageUrl(result.original_url);
} else if (result.thumbnail_url) {
console.warn("[抠图] ⚠️ 未找到original_url,使用thumbnail_url作为备选");
console.warn("[抠图] ⚠️ 未找到original_url,使用thumbnail_url作为备选:", result.thumbnail_url);
setProcessedImageUrl(result.thumbnail_url);
} else {
console.warn("[抠图] ⚠️ 未找到图片URL");
@ -479,7 +485,7 @@ export function ImageAnnotator({ imageUrl, onConfirm, onCancel, initialResizeMod
toast.success(`抠图完成!图片已保存到相册。处理时间: ${result.processing_time?.toFixed(2) || "未知"}秒`);
} else {
throw new Error(result.error || "抠图处理失败");
throw new Error(result.error || result.detail || "抠图处理失败");
}
} catch (error) {
console.error("[抠图] 错误:", error);
@ -523,11 +529,17 @@ export function ImageAnnotator({ imageUrl, onConfirm, onCancel, initialResizeMod
if (result.success && result.image_base64) {
// 保存处理后的图片URL和Base64(优先使用original_url,确保下载的是原图)
console.log("[变清晰] API返回结果:", {
hasOriginalUrl: !!result.original_url,
hasThumbnailUrl: !!result.thumbnail_url,
originalUrl: result.original_url?.substring(0, 100),
thumbnailUrl: result.thumbnail_url?.substring(0, 100)
});
if (result.original_url) {
console.log("[变清晰] 原图URL:", result.original_url);
console.log("[变清晰] ✅ 使用原图URL:", result.original_url);
setProcessedImageUrl(result.original_url);
} else if (result.thumbnail_url) {
console.warn("[变清晰] ⚠️ 未找到original_url,使用thumbnail_url作为备选");
console.warn("[变清晰] ⚠️ 未找到original_url,使用thumbnail_url作为备选:", result.thumbnail_url);
setProcessedImageUrl(result.thumbnail_url);
} else {
console.warn("[变清晰] ⚠️ 未找到图片URL");
@ -538,7 +550,7 @@ export function ImageAnnotator({ imageUrl, onConfirm, onCancel, initialResizeMod
toast.success(`变清晰完成!图片已保存到相册。处理时间: ${result.processing_time?.toFixed(2) || "未知"}秒`);
} else {
throw new Error(result.error || "变清晰处理失败");
throw new Error(result.error || result.detail || "变清晰处理失败");
}
} catch (error) {
console.error("[变清晰] 错误:", error);
@ -824,7 +836,7 @@ export function ImageAnnotator({ imageUrl, onConfirm, onCancel, initialResizeMod
const result = await response.json();
if (result.success && result.base64) {
if (result.success) {
// 保存处理后的图片URL和Base64(优先使用original_url,确保下载的是原图)
if (result.original_url) {
console.log("[图像拓展] 原图URL:", result.original_url);
@ -836,12 +848,15 @@ export function ImageAnnotator({ imageUrl, onConfirm, onCancel, initialResizeMod
console.warn("[图像拓展] ⚠️ 未找到图片URL");
setProcessedImageUrl(null);
}
setProcessedImageBase64(result.base64);
// 优先使用返回的base64,如果没有则使用thumbnail_url或original_url
if (result.base64) {
setProcessedImageBase64(result.base64);
}
setProcessType("extend");
toast.success(`图像拓展完成!图片已保存到相册。处理时间: ${result.processing_time?.toFixed(2) || "未知"}秒`);
} else {
throw new Error(result.error || "图像拓展处理失败");
throw new Error(result.error || result.detail || "图像拓展处理失败");
}
} catch (error) {
console.error("[图像拓展] 错误:", error);
@ -910,16 +925,42 @@ export function ImageAnnotator({ imageUrl, onConfirm, onCancel, initialResizeMod
// 确保使用的是原图URL(检查URL中是否包含thumb标识)
let downloadUrl = processedImageUrl;
// 更完善的缩略图URL转换逻辑
if (downloadUrl.includes("-thumb") || downloadUrl.includes("/thumb/") || downloadUrl.includes("thumbnail")) {
// 如果URL包含thumb标识,尝试转换为原图URL
// 处理各种可能的格式:
// - rmbg-thumb-xxx.png -> rmbg-orig-xxx.png
// - enhance-thumb-xxx.jpg -> enhance-orig-xxx.jpg
// - extend-thumb-xxx.jpg -> extend-orig-xxx.jpg
// - xxx/thumb/xxx -> xxx/orig/xxx
downloadUrl = downloadUrl
.replace(/-thumb-/g, "-orig-")
.replace(/-thumb\./g, "-orig.")
.replace(/\/thumb\//g, "/orig/")
.replace(/thumbnail/g, "original");
console.warn("[下载] ⚠️ 检测到缩略图URL,已转换为原图URL:", downloadUrl);
}
console.log("[下载] 下载URL:", downloadUrl);
// 如果转换后的URL仍然包含thumb标识,尝试更激进的转换
if (downloadUrl.includes("thumb")) {
try {
// 尝试直接替换文件名中的thumb为orig
const urlObj = new URL(downloadUrl);
const pathname = urlObj.pathname;
if (pathname.includes("thumb")) {
const newPathname = pathname.replace(/thumb/g, "orig");
downloadUrl = downloadUrl.replace(pathname, newPathname);
console.warn("[下载] ⚠️ 二次转换原图URL:", downloadUrl);
}
} catch (urlError) {
// 如果URL解析失败,尝试简单的字符串替换
downloadUrl = downloadUrl.replace(/thumb/g, "orig");
console.warn("[下载] ⚠️ 使用简单替换转换原图URL:", downloadUrl);
}
}
console.log("[下载] 最终下载URL:", downloadUrl);
// 从原图URL下载(原图已上传到S3)
const response = await fetch(downloadUrl);