Spaces:
Runtime error
Runtime error
import { dev } from '$app/environment'; | |
export function randomSeed() { | |
return BigInt(13248873089935215612 & (((1 << 63) - 1) * Math.random())); | |
} | |
export function base64ToBlob(base64image: string): Promise<Blob> { | |
return new Promise((resolve) => { | |
const img = new Image(); | |
img.onload = async () => { | |
const w = img.width; | |
const h = img.height; | |
const canvas = document.createElement('canvas'); | |
canvas.width = w; | |
canvas.height = h; | |
const ctx = canvas.getContext('2d') as CanvasRenderingContext2D; | |
ctx.drawImage(img, 0, 0, w, h); | |
const imgBlob: Blob = await new Promise((_resolve) => | |
canvas.toBlob(_resolve, 'image/jpeg', 0.95) | |
); | |
resolve(imgBlob); | |
}; | |
img.src = base64image; | |
}); | |
} | |
export async function uploadImage(imagBlob: Blob, prompt: string): string { | |
// simple regex slugify string for file name | |
const promptSlug = slugify(prompt); | |
const UPLOAD_URL = dev ? 'moon/uploads' : 'https://huggingface.co/uploads'; | |
const hash = crypto.randomUUID().split('-')[0]; | |
const fileName = `color-palette-${hash}-${promptSlug}.jpeg`; | |
const file = new File([imagBlob], fileName, { type: 'image/jpeg' }); | |
console.log('uploading image', file); | |
const response = await fetch(UPLOAD_URL, { | |
method: 'POST', | |
headers: { | |
'Content-Type': file.type, | |
'X-Requested-With': 'XMLHttpRequest' | |
}, | |
body: file /// <- File inherits from Blob | |
}); | |
const url = await response.text(); | |
console.log('uploaded images', url); | |
return url; | |
} | |
function slugify(text: string) { | |
if (!text) return ''; | |
return text | |
.toString() | |
.toLowerCase() | |
.replace(/\s+/g, '-') | |
.replace(/[^\w\-]+/g, '') | |
.replace(/\-\-+/g, '-') | |
.replace(/^-+/, '') | |
.replace(/-+$/, ''); | |
} | |