From 9d40b78ea501c86c996cfc46000b74ee8683289e Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 30 Dec 2025 18:17:45 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=9B=BE=E7=89=87=E7=BC=96?= =?UTF-8?q?=E8=BE=91=E5=99=A8=E4=B8=8B=E8=BD=BD=E5=92=8C=E5=9B=BE=E5=83=8F?= =?UTF-8?q?=E6=8B=93=E5=B1=95=E9=94=99=E8=AF=AF=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 改进下载逻辑,支持多种缩略图URL格式转换(-thumb-、-thumb.、/thumb/等) - 添加二次转换逻辑,确保正确转换为原图URL - 修复图像拓展错误处理,正确显示错误信息 - 添加详细调试日志,帮助定位问题 - 确保抠图和变清晰功能正确下载原图 --- components/image-annotator.tsx | 61 ++++++++++++++++++++++++++++------ 1 file changed, 51 insertions(+), 10 deletions(-) diff --git a/components/image-annotator.tsx b/components/image-annotator.tsx index 9c6eb56..dff5c92 100644 --- a/components/image-annotator.tsx +++ b/components/image-annotator.tsx @@ -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);