56 lines
1.5 KiB
TypeScript
56 lines
1.5 KiB
TypeScript
import type { GeneratedImage } from '../stores'
|
|
import { processPhoto } from './from-photo-generator'
|
|
|
|
export async function generateFromPhotoImage(file: File, size: number): Promise<GeneratedImage> {
|
|
try {
|
|
const result = await processPhoto(file, {
|
|
targetSize: size,
|
|
contrastEnhancement: true,
|
|
grayscaleConversion: true,
|
|
})
|
|
|
|
const image: GeneratedImage = {
|
|
id: `from-photo-${Date.now()}`,
|
|
canvas: result.canvas,
|
|
imageData: result.imageData,
|
|
generator: 'from-photo',
|
|
params: {
|
|
fileName: file.name,
|
|
fileSize: file.size,
|
|
fileType: file.type,
|
|
processedAt: new Date().toISOString(),
|
|
size,
|
|
contrastEnhanced: true,
|
|
grayscaleConverted: true,
|
|
},
|
|
}
|
|
|
|
return image
|
|
} catch (error) {
|
|
console.error('Failed to process photo:', error)
|
|
|
|
// Fallback: create a black canvas
|
|
const canvas = document.createElement('canvas')
|
|
const ctx = canvas.getContext('2d')!
|
|
canvas.width = size
|
|
canvas.height = size
|
|
ctx.fillStyle = '#000000'
|
|
ctx.fillRect(0, 0, size, size)
|
|
const imageData = ctx.getImageData(0, 0, size, size)
|
|
|
|
const fallbackImage: GeneratedImage = {
|
|
id: `from-photo-error-${Date.now()}`,
|
|
canvas,
|
|
imageData,
|
|
generator: 'from-photo',
|
|
params: {
|
|
fileName: file.name,
|
|
error: error instanceof Error ? error.message : 'Unknown error',
|
|
size,
|
|
},
|
|
}
|
|
|
|
return fallbackImage
|
|
}
|
|
}
|