editImage method
Edit an existing image based on a prompt
Creates an edited or extended image given an original image and a prompt. The original image must have transparent areas that indicate where to edit.
Implementation
@override
Future<ImageGenerationResponse> editImage(ImageEditRequest request) async {
// Google supports image editing through Gemini conversational approach
final model = _config.model;
final endpoint = 'models/$model:generateContent';
// Convert image to base64 for inline data
String? imageBase64;
String? mimeType;
if (request.image.data != null) {
imageBase64 = base64Encode(request.image.data!);
mimeType = _getMimeTypeFromFormat(request.image.format ?? 'png');
} else if (request.image.url != null) {
throw UnsupportedError(
'Google image editing does not support URL inputs, only direct image data');
}
if (imageBase64 == null) {
throw ArgumentError('Image data is required for Google image editing');
}
final requestData = {
'contents': [
{
'parts': [
{'text': request.prompt},
{
'inlineData': {
'mimeType': mimeType,
'data': imageBase64,
}
}
]
}
],
'generationConfig': {
'responseModalities': ['TEXT', 'IMAGE'],
if (request.count != null) 'candidateCount': request.count,
if (_config.temperature != null) 'temperature': _config.temperature,
},
if (_config.safetySettings != null)
'safetySettings':
_config.safetySettings!.map((s) => s.toJson()).toList(),
};
try {
final response = await _client.postJson(endpoint, requestData);
return _parseGeminiResponse(response, model);
} catch (e) {
_logger.severe('Google image editing failed: $e');
rethrow;
}
}