| 14 | const API_KEY = 'sk-your-secret-api-key-here'; // Replace with your API key if authentication is enabled |
| 15 | |
| 16 | async function encodeImageToBase64(imagePath) { |
| 17 | try { |
| 18 | const imageBuffer = fs.readFileSync(imagePath); |
| 19 | const base64Image = imageBuffer.toString('base64'); |
| 20 | const ext = path.extname(imagePath).toLowerCase(); |
| 21 | |
| 22 | let mimeType; |
| 23 | switch (ext) { |
| 24 | case '.jpg': |
| 25 | case '.jpeg': |
| 26 | mimeType = 'image/jpeg'; |
| 27 | break; |
| 28 | case '.png': |
| 29 | mimeType = 'image/png'; |
| 30 | break; |
| 31 | case '.gif': |
| 32 | mimeType = 'image/gif'; |
| 33 | break; |
| 34 | case '.webp': |
| 35 | mimeType = 'image/webp'; |
| 36 | break; |
| 37 | default: |
| 38 | mimeType = 'image/jpeg'; |
| 39 | } |
| 40 | |
| 41 | return `data:${mimeType};base64,${base64Image}`; |
| 42 | } catch (error) { |
| 43 | throw new Error(`Failed to encode image: ${error.message}`); |
| 44 | } |
| 45 | } |
| 46 | |
| 47 | async function testImageWithGemini(imageDataUrl, question = "What do you see in this image?") { |
| 48 | const requestBody = { |