made some changes for testing (UI)

This commit is contained in:
2025-12-16 20:41:26 -05:00
parent 712c77f10c
commit 6d506fc636

View File

@@ -34,20 +34,24 @@ const addFromLocal = () => {
fileInput.value?.click() fileInput.value?.click()
} }
const onFileChange = (event: Event) => { const onFileChange = async (event: Event) => {
const files = (event.target as HTMLInputElement).files const files = (event.target as HTMLInputElement).files
if (files && files.length > 0) { if (files && files.length > 0) {
const file = files[0] const file = files[0]
if (localImageUrl.value) URL.revokeObjectURL(localImageUrl.value) if (localImageUrl.value) URL.revokeObjectURL(localImageUrl.value)
const url = URL.createObjectURL(file) const { blob, url } = await resizeImageFile(file, 512)
localImageUrl.value = url localImageUrl.value = url
const idx = availableImages.value.findIndex((img) => img.id === 'local-upload') const idx = availableImages.value.findIndex((img) => img.id === 'local-upload')
if (idx === -1) { if (idx === -1) {
availableImages.value.unshift({ id: 'local-upload', url }) // <-- use unshift availableImages.value.unshift({ id: 'local-upload', url })
} else { } else {
availableImages.value[idx].url = url availableImages.value[idx].url = url
} }
emit('add-image', { id: 'local-upload', url, file }) emit('add-image', {
id: 'local-upload',
url,
file: new File([blob], file.name, { type: 'image/png' }),
})
emit('update:modelValue', 'local-upload') emit('update:modelValue', 'local-upload')
} }
} }
@@ -90,36 +94,15 @@ const takePhoto = async () => {
const confirmPhoto = async () => { const confirmPhoto = async () => {
if (capturedImageUrl.value) { if (capturedImageUrl.value) {
if (localImageUrl.value) URL.revokeObjectURL(localImageUrl.value) if (localImageUrl.value) URL.revokeObjectURL(localImageUrl.value)
const img = new window.Image() // Convert dataURL to Blob
img.src = capturedImageUrl.value const res = await fetch(capturedImageUrl.value)
await new Promise((resolve) => { const originalBlob = await res.blob()
img.onload = resolve const { blob, url } = await resizeImageFile(originalBlob, 512)
})
let { width, height } = img
const maxDim = 512
if (width > maxDim || height > maxDim) {
if (width > height) {
height = Math.round((height * maxDim) / width)
width = maxDim
} else {
width = Math.round((width * maxDim) / height)
height = maxDim
}
}
const canvas = document.createElement('canvas')
canvas.width = width
canvas.height = height
const ctx = canvas.getContext('2d')
ctx?.drawImage(img, 0, 0, width, height)
const blob: Blob = await new Promise((resolve) =>
canvas.toBlob((b) => resolve(b!), 'image/png'),
)
const url = URL.createObjectURL(blob)
localImageUrl.value = url localImageUrl.value = url
cameraFile.value = new File([blob], 'camera.png', { type: 'image/png' }) cameraFile.value = new File([blob], 'camera.png', { type: 'image/png' })
const idx = availableImages.value.findIndex((img) => img.id === 'local-upload') const idx = availableImages.value.findIndex((img) => img.id === 'local-upload')
if (idx === -1) { if (idx === -1) {
availableImages.value.unshift({ id: 'local-upload', url }) // <-- use unshift availableImages.value.unshift({ id: 'local-upload', url })
} else { } else {
availableImages.value[idx].url = url availableImages.value[idx].url = url
} }
@@ -190,6 +173,37 @@ onMounted(async () => {
loadingImages.value = false loadingImages.value = false
} }
}) })
async function resizeImageFile(
file: File | Blob,
maxDim = 512,
): Promise<{ blob: Blob; url: string }> {
const img = new window.Image()
const url = URL.createObjectURL(file)
img.src = url
await new Promise((resolve) => {
img.onload = resolve
})
let { width, height } = img
if (width > maxDim || height > maxDim) {
if (width > height) {
height = Math.round((height * maxDim) / width)
width = maxDim
} else {
width = Math.round((width * maxDim) / height)
height = maxDim
}
}
const canvas = document.createElement('canvas')
canvas.width = width
canvas.height = height
const ctx = canvas.getContext('2d')
ctx?.drawImage(img, 0, 0, width, height)
const blob: Blob = await new Promise((resolve) => canvas.toBlob((b) => resolve(b!), 'image/png'))
URL.revokeObjectURL(url)
return { blob, url: URL.createObjectURL(blob) }
}
</script> </script>
<template> <template>