From 4f598525e13cd0900711c4d585bcd823c4c2e8c4 Mon Sep 17 00:00:00 2001 From: Zhukj <3262118957> Date: Mon, 20 Apr 2026 17:44:24 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=E4=BC=98=E5=8C=96=E5=9B=BE?= =?UTF-8?q?=E7=89=87=E6=B8=85=E6=99=B0=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/script.js | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/js/script.js b/js/script.js index aa4346b..3ce160b 100644 --- a/js/script.js +++ b/js/script.js @@ -1778,6 +1778,13 @@ document.body.appendChild(menu); } + // 从 blob 显示预览 + function showPreviewFromBlob(blob) { + console.log('预览图片大小:', (blob.size / 1024).toFixed(2), 'KB'); + const dataUrl = URL.createObjectURL(blob); + showPreviewModal(dataUrl, blob); + } + // 显示预览 async function showPreview() { const canvas = await generateCanvas(); @@ -1787,6 +1794,11 @@ const blob = await new Promise(resolve => canvas.toBlob(resolve, 'image/png', 1.0)); console.log('预览图片大小:', (blob.size / 1024).toFixed(2), 'KB'); const dataUrl = URL.createObjectURL(blob); + showPreviewModal(dataUrl, blob); + } + + // 显示预览弹窗 + function showPreviewModal(dataUrl, blob) { const tipOverlay = document.createElement('div'); tipOverlay.id = 'previewTip'; @@ -1806,7 +1818,7 @@ `; const tipText = document.createElement('p'); - tipText.textContent = '长按图片保存到相册'; + tipText.innerHTML = '长按图片保存到相册
(预览已缩放,实际保存为高清原图)'; tipText.style.cssText = ` color: #fff; font-size: 18px; @@ -1846,7 +1858,7 @@ `; saveBtn.onclick = async () => { tipOverlay.remove(); - await saveImageToGallery(dataUrl); + await saveImageToGallery(dataUrl, blob); }; const closeBtn = document.createElement('button'); @@ -1871,13 +1883,17 @@ } // 保存图片到相册 - async function saveImageToGallery(dataUrl) { + async function saveImageToGallery(dataUrl, blob) { const filename = '邀请函_' + Date.now() + '.png'; + // 如果没有传入 blob,尝试从 window._lastExportBlob 获取 + if (!blob && window._lastExportBlob) { + blob = window._lastExportBlob; + } + // 尝试使用 File System Access API (Android/Chrome) if ('showSaveFilePicker' in window) { try { - const blob = await (await fetch(dataUrl)).blob(); const handle = await window.showSaveFilePicker({ suggestedName: filename, types: [{ @@ -1898,7 +1914,6 @@ // 尝试使用 Web Share API (iOS Safari) if (navigator.share && navigator.canShare) { try { - const blob = await (await fetch(dataUrl)).blob(); const file = new File([blob], filename, { type: 'image/png' }); if (navigator.canShare({ files: [file] })) { @@ -2247,6 +2262,9 @@ console.log('导出图片大小:', (blob.size / 1024).toFixed(2), 'KB'); const dataUrl = URL.createObjectURL(blob); const filename = '邀请函_' + Date.now() + '.png'; + + // 保存 blob 供后续使用 + window._lastExportBlob = blob; const tipOverlay = document.createElement('div'); tipOverlay.id = 'mobileSaveTip'; @@ -2342,7 +2360,7 @@ `; previewBtn.onclick = () => { tipOverlay.remove(); - showPreview(); + showPreviewFromBlob(blob); }; // 插入到标题后面