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