Spaces:
Sleeping
Sleeping
File size: 2,619 Bytes
6cdce85 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
const MAX_DIMENSION = 640;
export async function resizeImageForInference(
imageSource: string
): Promise<string> {
return new Promise((resolve, reject) => {
const img = new Image();
img.crossOrigin = 'anonymous';
img.onload = () => {
let { width, height } = img;
if (width <= MAX_DIMENSION && height <= MAX_DIMENSION) {
if (imageSource.startsWith('data:')) {
resolve(imageSource.split(',')[1]);
} else {
const canvas = document.createElement('canvas');
canvas.width = width;
canvas.height = height;
const ctx = canvas.getContext('2d');
if (!ctx) {
reject(new Error('Failed to get canvas context'));
return;
}
ctx.drawImage(img, 0, 0);
const dataUrl = canvas.toDataURL('image/jpeg', 0.95);
resolve(dataUrl.split(',')[1]);
}
return;
}
const scale = Math.min(MAX_DIMENSION / width, MAX_DIMENSION / height);
const newWidth = Math.round(width * scale);
const newHeight = Math.round(height * scale);
const canvas = document.createElement('canvas');
canvas.width = newWidth;
canvas.height = newHeight;
const ctx = canvas.getContext('2d');
if (!ctx) {
reject(new Error('Failed to get canvas context'));
return;
}
ctx.imageSmoothingEnabled = true;
ctx.imageSmoothingQuality = 'high';
ctx.drawImage(img, 0, 0, newWidth, newHeight);
const dataUrl = canvas.toDataURL('image/jpeg', 0.95);
resolve(dataUrl.split(',')[1]);
};
img.onerror = () => {
reject(new Error('Failed to load image'));
};
img.src = imageSource;
});
}
export async function fetchAndResizeImage(url: string): Promise<string> {
try {
const response = await fetch(url);
const blob = await response.blob();
const dataUrl = await new Promise<string>((resolve) => {
const reader = new FileReader();
reader.onloadend = () => resolve(reader.result as string);
reader.readAsDataURL(blob);
});
return resizeImageForInference(dataUrl);
} catch (error) {
console.error('Failed to fetch and resize image:', error);
throw error;
}
}
|