|
|
|
|
|
class ColaraModel { |
|
|
|
|
|
|
|
|
static async getInstance(progress_callback = null) { |
|
|
return new ColaraModel(); |
|
|
} |
|
|
|
|
|
|
|
|
async generate(imageBlob) { |
|
|
|
|
|
const img = await new Promise((resolve) => { |
|
|
const reader = new FileReader(); |
|
|
reader.onload = (e) => { |
|
|
const image = new Image(); |
|
|
image.onload = () => resolve(image); |
|
|
image.src = e.target.result; |
|
|
}; |
|
|
reader.readAsDataURL(imageBlob); |
|
|
}); |
|
|
|
|
|
|
|
|
const tempCanvas = document.createElement('canvas'); |
|
|
tempCanvas.width = img.width; |
|
|
tempCanvas.height = img.height; |
|
|
const tempCtx = tempCanvas.getContext('2d'); |
|
|
tempCtx.drawImage(img, 0, 0); |
|
|
|
|
|
const imageData = tempCtx.getImageData(0, 0, img.width, img.height); |
|
|
const data = imageData.data; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const randomRed = Math.floor(Math.random() * 256); |
|
|
const randomGreen = Math.floor(Math.random() * 256); |
|
|
const randomBlue = Math.floor(Math.random() * 256); |
|
|
|
|
|
|
|
|
for (let i = 0; i < data.length; i += 4) { |
|
|
const originalRed = data[i]; |
|
|
const originalGreen = data[i + 1]; |
|
|
const originalBlue = data[i + 2]; |
|
|
|
|
|
const brightness = 0.2126 * originalRed + 0.7152 * originalGreen + 0.0722 * originalBlue; |
|
|
|
|
|
data[i] = randomRed * (brightness / 255); |
|
|
data[i + 1] = randomGreen * (brightness / 255); |
|
|
data[i + 2] = randomBlue * (brightness / 255); |
|
|
} |
|
|
|
|
|
|
|
|
tempCtx.putImageData(imageData, 0, 0); |
|
|
|
|
|
|
|
|
const resultBlob = await new Promise(resolve => tempCanvas.toBlob(resolve, 'image/png')); |
|
|
|
|
|
|
|
|
return { |
|
|
image: resultBlob, |
|
|
generated_text: "Image générée par Colara" |
|
|
}; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
export default ColaraModel; |