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 = `
-
+