Optimize image loading by using canvas to convert fetched images to data URLs

This commit is contained in:
Kwaroran
2024-11-27 09:17:57 +09:00
parent 842258a0f5
commit eaf429a61f

View File

@@ -345,12 +345,23 @@
if(url.startsWith('http://asset.localhost') || url.startsWith('https://asset.localhost') || url.startsWith('https://sv.risuai')){
try {
const data = await fetch(url)
img.setAttribute('src', `${await data.blob().then((b) => new Promise((resolve, reject) => {
const canvas = document.createElement('canvas')
const ctx = canvas.getContext('2d')
const img = new Image()
img.src = await data.blob().then((b) => new Promise((resolve, reject) => {
const reader = new FileReader()
reader.onload = () => resolve(reader.result as string)
reader.onerror = reject
reader.readAsDataURL(b)
}))}`)
}))
await new Promise((resolve) => {
img.onload = resolve
})
canvas.width = img.width
canvas.height = img.height
ctx.drawImage(img, 0, 0)
const dataURL = canvas.toDataURL('image/jpeg')
img.setAttribute('src', dataURL)
} catch (error) {
console.error(error)
}
@@ -363,12 +374,22 @@
if(iconImage.startsWith('http://asset.localhost') || iconImage.startsWith('https://asset.localhost') || iconImage.startsWith('https://sv.risuai')){
try {
const data = await fetch(iconImage)
iconDataUrl = await data.blob().then((b) => new Promise((resolve, reject) => {
const canvas = document.createElement('canvas')
const ctx = canvas.getContext('2d')
const img = new Image()
img.src = await data.blob().then((b) => new Promise((resolve, reject) => {
const reader = new FileReader()
reader.onload = () => resolve(reader.result as string)
reader.onerror = reject
reader.readAsDataURL(b)
}))
await new Promise((resolve) => {
img.onload = resolve
})
canvas.width = img.width
canvas.height = img.height
ctx.drawImage(img, 0, 0)
iconDataUrl = canvas.toDataURL('image/jpeg')
} catch (error) {
console.error(error)
}