editImage method

Future<ImagesResult> editImage({
  1. required List<Uint8List> imageBytes,
  2. required List<String> filenames,
  3. required String prompt,
  4. ImageGenerationBackground? background,
  5. Uint8List? maskBytes,
  6. String? maskFilename,
  7. String? model,
  8. int? n,
  9. int? outputCompression,
  10. ImageOutputFormat? outputFormat,
  11. ImageOutputQuality? quality,
  12. ImageResponseFormat? responseFormat,
  13. ImageOutputSize? size,
  14. String? user,
})

Implementation

Future<ImagesResult> editImage({
  required List<Uint8List> imageBytes,
  required List<String> filenames,
  required String prompt,
  ImageGenerationBackground? background,
  Uint8List? maskBytes,
  String? maskFilename,
  String? model,
  int? n,
  int? outputCompression,
  ImageOutputFormat? outputFormat,
  ImageOutputQuality? quality,
  ImageResponseFormat? responseFormat,
  ImageOutputSize? size,
  String? user,
}) async {
  final boundary = '----dart-openai-image-edit-${DateTime.now().microsecondsSinceEpoch.toRadixString(16)}';

  final fields = <String, String>{
    'prompt': prompt,
    if (background != null) 'background': background.toJson(),
    if (model != null) 'model': model,
    if (n != null) 'n': '$n',
    if (outputCompression != null) 'output_compression': '$outputCompression',
    if (outputFormat != null) 'output_format': outputFormat.toJson(),
    if (quality != null) 'quality': quality.toJson(),
    if (responseFormat != null) 'response_format': responseFormat.toJson(),
    if (size != null) 'size': size.toJson(),
    if (user != null) 'user': user,
  };

  final body = _buildMultipartBodyMultiple(
    boundary: boundary,
    files: [
      for (var i = 0; i < imageBytes.length; i++) _MultipartFileSpec(field: 'image', bytes: imageBytes[i], filename: filenames[i]),
      if (maskBytes != null) _MultipartFileSpec(field: 'mask', bytes: maskBytes, filename: maskFilename ?? 'mask.png'),
    ],
    fields: fields,
  );

  final resp = await httpClient.post(
    baseUrl.resolve('images/edits'),
    headers: getHeaders({'Content-Type': 'multipart/form-data; boundary=$boundary'}),
    body: body,
  );

  if (resp.statusCode == 200) {
    return ImagesResult.fromJson(jsonDecode(resp.body));
  }
  throw OpenAIRequestException.fromHttpResponse(resp);
}