From 4a32ee37c49ad8c4d7c6e976551245849b96828f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Fri, 11 Sep 2026 17:52:00 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20Bytes=20=E8=BF=81=E7=A7=BB?= =?UTF-8?q?=E5=90=8E=E7=9A=84=E5=9B=BE=E7=89=87=E7=B1=BB=E5=9E=8B=E8=BE=B9?= =?UTF-8?q?=E7=95=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 统一使用 Bytes 的只读引用并在旧 Vec 接口处显式转换。 修复编辑器参考图对齐与 Raw PNG 解码编译错误。 --- server-rs/crates/api-server/src/editor_project.rs | 5 +++-- server-rs/crates/api-server/src/editor_project_icon.rs | 2 +- server-rs/crates/api-server/src/raw_image.rs | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/server-rs/crates/api-server/src/editor_project.rs b/server-rs/crates/api-server/src/editor_project.rs index 0e89d6be9..c7069e175 100644 --- a/server-rs/crates/api-server/src/editor_project.rs +++ b/server-rs/crates/api-server/src/editor_project.rs @@ -4646,7 +4646,7 @@ fn prepare_editor_image_edit_references( ); } for (index, reference) in reference_images.iter_mut().enumerate() { - let decoded = image::load_from_memory(reference.bytes.as_slice()).map_err(|error| { + let decoded = image::load_from_memory(reference.bytes.as_ref()).map_err(|error| { AppError::from_status(StatusCode::BAD_REQUEST).with_details(json!({ "provider": "editor-image-edit", "message": format!("图片改造参考图不是有效图片:{error}"), @@ -4677,7 +4677,8 @@ fn prepare_editor_image_edit_references( image::DynamicImage::ImageRgba8(aligned), StatusCode::BAD_REQUEST, "图片改造参考图 16 对齐失败", - )?; + )? + .into(); reference.mime_type = "image/png".to_string(); reference.file_name = format!("editor-image-edit-reference-{}.png", index + 1); } diff --git a/server-rs/crates/api-server/src/editor_project_icon.rs b/server-rs/crates/api-server/src/editor_project_icon.rs index f7f318b86..a065f626b 100644 --- a/server-rs/crates/api-server/src/editor_project_icon.rs +++ b/server-rs/crates/api-server/src/editor_project_icon.rs @@ -2324,7 +2324,7 @@ pub async fn split_editor_icon_spritesheet( Err(_) => return Err(editor_icon_spritesheet_processing_timeout_error()), }; let source = DownloadedImage { - bytes: reference.bytes, + bytes: reference.bytes.to_vec(), mime_type: reference.mime_type, extension: "png".to_string(), }; diff --git a/server-rs/crates/api-server/src/raw_image.rs b/server-rs/crates/api-server/src/raw_image.rs index 29541924d..811d316d4 100644 --- a/server-rs/crates/api-server/src/raw_image.rs +++ b/server-rs/crates/api-server/src/raw_image.rs @@ -370,7 +370,7 @@ fn decode_image(value: RawImageData, field: &str) -> Result<(ReferenceImage, u32 if bytes.is_empty() { return Err(bad_request(format!("{field} 文件不能为空"))); } - let mut reader = ImageReader::new(Cursor::new(bytes.as_slice())) + let mut reader = ImageReader::new(Cursor::new(bytes.as_ref())) .with_guessed_format() .map_err(|_| bad_request(format!("{field} 文件必须是有效 PNG 文件")))?; let mut limits = image::Limits::default();