|
|
|
|
|
|
|
export async function makeWhiteTransparent(imageUrl: string): Promise<string> { |
|
return new Promise((resolve, reject) => { |
|
const img = new Image(); |
|
img.crossOrigin = 'anonymous'; |
|
|
|
img.onload = () => { |
|
const canvas = document.createElement('canvas'); |
|
const ctx = canvas.getContext('2d'); |
|
|
|
if (!ctx) { |
|
reject(new Error('Failed to get canvas context')); |
|
return; |
|
} |
|
|
|
canvas.width = img.width; |
|
canvas.height = img.height; |
|
|
|
|
|
ctx.drawImage(img, 0, 0); |
|
|
|
|
|
const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height); |
|
const data = imageData.data; |
|
|
|
|
|
const whiteThreshold = 240; |
|
|
|
|
|
for (let i = 0; i < data.length; i += 4) { |
|
const r = data[i]; |
|
const g = data[i + 1]; |
|
const b = data[i + 2]; |
|
|
|
|
|
if (r > whiteThreshold && g > whiteThreshold && b > whiteThreshold) { |
|
|
|
const whiteness = Math.min(r, g, b) / 255; |
|
|
|
|
|
data[i + 3] = Math.floor((1 - whiteness) * 255); |
|
} |
|
} |
|
|
|
|
|
ctx.putImageData(imageData, 0, 0); |
|
|
|
|
|
const base64 = canvas.toDataURL('image/png'); |
|
resolve(base64); |
|
}; |
|
|
|
img.onerror = () => { |
|
reject(new Error('Failed to load image')); |
|
}; |
|
|
|
img.src = imageUrl; |
|
}); |
|
} |
|
|
|
|
|
|
|
|
|
export async function imageUrlToBase64(imageUrl: string): Promise<string> { |
|
return new Promise((resolve, reject) => { |
|
const img = new Image(); |
|
img.crossOrigin = 'anonymous'; |
|
|
|
img.onload = () => { |
|
const canvas = document.createElement('canvas'); |
|
const ctx = canvas.getContext('2d'); |
|
|
|
if (!ctx) { |
|
reject(new Error('Failed to get canvas context')); |
|
return; |
|
} |
|
|
|
canvas.width = img.width; |
|
canvas.height = img.height; |
|
ctx.drawImage(img, 0, 0); |
|
|
|
const base64 = canvas.toDataURL('image/png'); |
|
resolve(base64); |
|
}; |
|
|
|
img.onerror = () => { |
|
reject(new Error('Failed to load image')); |
|
}; |
|
|
|
img.src = imageUrl; |
|
}); |
|
} |