减少图片编辑 multipart 字节复制
将已克隆的选项按值传入阻塞传输函数 构造 mask 与参考图表单时直接移动字节缓冲
This commit is contained in:
@@ -168,8 +168,8 @@ pub(crate) async fn send_vector_engine_multipart_edit_request_with_curl_options(
|
||||
negative_prompt.as_deref(),
|
||||
normalized_size.as_str(),
|
||||
candidate_count,
|
||||
reference_images.as_slice(),
|
||||
options.as_ref(),
|
||||
reference_images,
|
||||
options,
|
||||
timeout_ms,
|
||||
)
|
||||
})
|
||||
@@ -271,8 +271,8 @@ fn send_multipart_edit_request_with_curl_blocking(
|
||||
negative_prompt: Option<&str>,
|
||||
normalized_size: &str,
|
||||
candidate_count: u32,
|
||||
reference_images: &[ReferenceImage],
|
||||
options: Option<&RawImageEditOptions>,
|
||||
reference_images: Vec<ReferenceImage>,
|
||||
options: Option<RawImageEditOptions>,
|
||||
timeout_ms: u64,
|
||||
) -> Result<VectorEngineCurlResponse, VectorEngineCurlError> {
|
||||
let mut form = Form::new();
|
||||
@@ -288,34 +288,48 @@ fn send_multipart_edit_request_with_curl_blocking(
|
||||
.add()?;
|
||||
|
||||
if let Some(options) = options {
|
||||
if let Some(quality) = options.quality.as_deref() {
|
||||
let RawImageEditOptions {
|
||||
quality,
|
||||
background,
|
||||
output_format,
|
||||
mask,
|
||||
..
|
||||
} = options;
|
||||
if let Some(quality) = quality {
|
||||
form.part("quality").contents(quality.as_bytes()).add()?;
|
||||
}
|
||||
if let Some(background) = options.background.as_deref() {
|
||||
if let Some(background) = background {
|
||||
form.part("background")
|
||||
.contents(background.as_bytes())
|
||||
.add()?;
|
||||
}
|
||||
if let Some(output_format) = options.output_format.as_deref() {
|
||||
if let Some(output_format) = output_format {
|
||||
form.part("output_format")
|
||||
.contents(output_format.as_bytes())
|
||||
.add()?;
|
||||
}
|
||||
if let Some(mask) = options.mask.as_ref() {
|
||||
if let Some(mask) = mask {
|
||||
let ReferenceImage {
|
||||
bytes,
|
||||
mime_type,
|
||||
file_name,
|
||||
} = mask;
|
||||
form.part("mask")
|
||||
.buffer(mask.file_name.as_str(), mask.bytes.clone())
|
||||
.content_type(mask.mime_type.as_str())
|
||||
.buffer(file_name.as_str(), bytes)
|
||||
.content_type(mime_type.as_str())
|
||||
.add()?;
|
||||
}
|
||||
}
|
||||
|
||||
for reference_image in reference_images {
|
||||
let ReferenceImage {
|
||||
bytes,
|
||||
mime_type,
|
||||
file_name,
|
||||
} = reference_image;
|
||||
form.part("image")
|
||||
.buffer(
|
||||
reference_image.file_name.as_str(),
|
||||
reference_image.bytes.clone(),
|
||||
)
|
||||
.content_type(reference_image.mime_type.as_str())
|
||||
.buffer(file_name.as_str(), bytes)
|
||||
.content_type(mime_type.as_str())
|
||||
.add()?;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user