减少图片编辑 multipart 字节复制

将已克隆的选项按值传入阻塞传输函数

构造 mask 与参考图表单时直接移动字节缓冲
This commit is contained in:
2026-09-08 12:16:00 +08:00
parent 5836aaec26
commit d1f9f4e1ef
@@ -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()?;
}