| |
| 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; |