This commit is contained in:
@@ -16,6 +16,7 @@ use img_parts::{Bytes as ImgBytes, DynImage, ImageEXIF, ImageICC};
|
||||
use oxipng::StripChunks;
|
||||
use rgb::FromSlice;
|
||||
use std::io::Cursor;
|
||||
use std::time::Instant;
|
||||
|
||||
const TARGET_MIN_LONG_EDGE: u32 = 640;
|
||||
const TARGET_MIN_SCALE: f64 = 0.55;
|
||||
@@ -287,7 +288,12 @@ pub async fn compress_image_bytes(
|
||||
max_height: Option<u32>,
|
||||
preserve_metadata: bool,
|
||||
) -> Result<Vec<u8>, AppError> {
|
||||
let max_image_pixels = state.config.max_image_pixels;
|
||||
let started = Instant::now();
|
||||
let bytes_in = input.len() as u64;
|
||||
let max_image_pixels = crate::services::settings::runtime_policy(state)
|
||||
.await?
|
||||
.file_limits
|
||||
.max_image_pixels;
|
||||
let permit = state
|
||||
.image_processing_semaphore
|
||||
.clone()
|
||||
@@ -297,7 +303,7 @@ pub async fn compress_image_bytes(
|
||||
AppError::new(ErrorCode::Internal, "图片处理并发控制器已关闭").with_source(err)
|
||||
})?;
|
||||
|
||||
tokio::task::spawn_blocking(move || {
|
||||
let result = match tokio::task::spawn_blocking(move || {
|
||||
let _permit = permit;
|
||||
compress_image_bytes_sync(
|
||||
input,
|
||||
@@ -313,9 +319,19 @@ pub async fn compress_image_bytes(
|
||||
)
|
||||
})
|
||||
.await
|
||||
.map_err(|err| {
|
||||
AppError::new(ErrorCode::CompressionFailed, "图片处理任务异常退出").with_source(err)
|
||||
})?
|
||||
{
|
||||
Ok(result) => result,
|
||||
Err(err) => Err(
|
||||
AppError::new(ErrorCode::CompressionFailed, "图片处理任务异常退出").with_source(err),
|
||||
),
|
||||
};
|
||||
crate::services::metrics::record_compression(
|
||||
state,
|
||||
started.elapsed(),
|
||||
bytes_in,
|
||||
result.as_ref().ok().map(|bytes| bytes.len() as u64),
|
||||
);
|
||||
result
|
||||
}
|
||||
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
|
||||
Reference in New Issue
Block a user