修复:在indexedDB中存储图像的原始base64数据而非Blob URL,以确保跨会话的持久性。
This commit is contained in:
37
script.js
37
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 = `
|
||||
<img src="${img.url}" alt="Generated Image" loading="lazy" class="generated-image">
|
||||
<img src="${displayUrl}" alt="Generated Image" loading="lazy" class="generated-image">
|
||||
<div class="image-overlay">
|
||||
<div class="btn-grid">
|
||||
<div class="btn-grid-row">
|
||||
|
||||
Reference in New Issue
Block a user