diff --git a/script.js b/script.js index 2b44a35..b9271a3 100644 --- a/script.js +++ b/script.js @@ -402,9 +402,15 @@ const indexedDBStorage = { const transaction = this.db.transaction([CONFIG.INDEXED_DB.STORES.GENERATED_IMAGES], 'readwrite'); const store = transaction.objectStore(CONFIG.INDEXED_DB.STORES.GENERATED_IMAGES); + // 检查是否是Blob URL,如果是则获取原始base64数据 + let storedUrl = imageUrl; + if (imageUrl.startsWith('blob:') && imageUrl._originalBase64) { + storedUrl = imageUrl._originalBase64; + } + const image = { imageId: imageId, - url: imageUrl, + url: storedUrl, timestamp: Date.now() }; @@ -708,7 +714,7 @@ const apiService = { const messageContent = choice.message.content; const images = []; - // 提取图像数据并转换为Blob URL + // 提取图像数据并转换为Blob URL,但保留原始base64数据 if (choice.message.images) { choice.message.images.forEach(img => { const blobUrl = utils.base64ToBlobUrl(img.image_url.url); @@ -814,7 +820,7 @@ const uiController = { const imageId = Date.now() + Math.random(); - // 确保imageUrl是Blob URL + // 确保imageUrl是Blob URL用于显示,但保存原始URL用于存储 const displayUrl = imageUrl.startsWith('blob:') ? imageUrl : utils.base64ToBlobUrl(imageUrl); imageDiv.innerHTML = ` @@ -928,7 +934,7 @@ const uiController = { placeholder.className = 'image-item fade-in'; placeholder.id = ''; - // 确保imageUrl是Blob URL + // 确保imageUrl是Blob URL用于显示,但保存原始URL用于存储 const displayUrl = imageUrl.startsWith('blob:') ? imageUrl : utils.base64ToBlobUrl(imageUrl); placeholder.innerHTML = ` @@ -1050,8 +1056,9 @@ const uiController = { // 找到当前图像在generatedImages中的索引 currentImageIndex = generatedImages.findIndex(img => img.url === imageUrl); - // 设置图像源 - modalImage.src = imageUrl; + // 设置图像源 - 确保正确处理base64和Blob URL + const displayUrl = imageUrl.startsWith('blob:') ? imageUrl : utils.base64ToBlobUrl(imageUrl); + modalImage.src = displayUrl; modalImage.onerror = function() { utils.showNotification('图像加载失败', 'danger'); }; @@ -1280,7 +1287,11 @@ const uiController = { const deleteButton = document.getElementById('viewerDeleteImage'); if (modalImage && generatedImages[currentImageIndex]) { - modalImage.src = generatedImages[currentImageIndex].url; + // 确保正确处理base64和Blob URL + const displayUrl = generatedImages[currentImageIndex].url.startsWith('blob:') ? + generatedImages[currentImageIndex].url : + utils.base64ToBlobUrl(generatedImages[currentImageIndex].url); + modalImage.src = displayUrl; // 更新删除按钮对应的图像ID if (deleteButton) { @@ -1295,7 +1306,10 @@ const uiController = { currentImageIndex = generatedImages.length - 1; } if (currentImageIndex >= 0 && currentImageIndex < generatedImages.length) { - modalImage.src = generatedImages[currentImageIndex].url; + const newDisplayUrl = generatedImages[currentImageIndex].url.startsWith('blob:') ? + generatedImages[currentImageIndex].url : + utils.base64ToBlobUrl(generatedImages[currentImageIndex].url); + modalImage.src = newDisplayUrl; deleteButton.onclick = arguments.callee; } uiController.updateNavigationButtons(); @@ -1367,7 +1381,7 @@ const uiController = { displayImagePreview: function(imageData) { const preview = document.getElementById('imagePreview'); - // 确保图像数据是Blob URL + // 确保图像数据是Blob URL用于显示,但保持原始数据用于其他操作 const displayUrl = imageData.data.startsWith('blob:') ? imageData.data : utils.base64ToBlobUrl(imageData.data); preview.innerHTML = ` @@ -1494,8 +1508,11 @@ const uiController = { const imageDiv = document.createElement('div'); imageDiv.className = 'image-item fade-in'; + // 确保从IndexedDB加载的base64数据转换为Blob URL用于显示 + const displayUrl = img.url.startsWith('blob:') ? img.url : utils.base64ToBlobUrl(img.url); + imageDiv.innerHTML = ` - Generated Image + Generated Image