@@ -105,8 +105,12 @@ fn determine_image_format(extension: &str) -> Result<ImageFormat, actix_web::Err
|
||||
"gif" => Ok(ImageFormat::Gif),
|
||||
"bmp" => Ok(ImageFormat::Bmp),
|
||||
"ico" => Ok(ImageFormat::Ico),
|
||||
"tiff" => Ok(ImageFormat::Tiff),
|
||||
"tiff" | "tif" => Ok(ImageFormat::Tiff),
|
||||
"webp" => Ok(ImageFormat::WebP),
|
||||
"heic" | "heif" => {
|
||||
// Для HEIC мы будем конвертировать в JPEG при сохранении
|
||||
Ok(ImageFormat::Jpeg)
|
||||
},
|
||||
_ => {
|
||||
log::error!("Неподдерживаемый формат изображения: {}", extension);
|
||||
Err(ErrorInternalServerError("Неподдерживаемый формат изображения"))
|
||||
@@ -128,7 +132,14 @@ pub async fn thumbdata_save(
|
||||
let (base_filename, _, extension) = parse_file_path(&original_filename);
|
||||
warn!("detected file extension: {}", extension);
|
||||
let ext = extension.to_lowercase();
|
||||
let filename = format!("{}.{}", base_filename, ext);
|
||||
|
||||
// Определяем выходной формат
|
||||
let output_ext = match ext.as_str() {
|
||||
"heic" | "heif" => "jpg", // Конвертируем HEIC в JPEG
|
||||
_ => &ext
|
||||
};
|
||||
|
||||
let filename = format!("{}.{}", base_filename, output_ext);
|
||||
|
||||
let img = match image::load_from_memory(&original_data) {
|
||||
Ok(img) => img,
|
||||
@@ -140,14 +151,14 @@ pub async fn thumbdata_save(
|
||||
|
||||
warn!("generate thumbnails for {}", filename);
|
||||
|
||||
// Определяем формат изображения
|
||||
let format = determine_image_format(&ext)?;
|
||||
// Определяем формат изображения для сохранения
|
||||
let format = determine_image_format(output_ext)?;
|
||||
|
||||
// Генерация миниатюр с использованием определённого формата
|
||||
match generate_thumbnails(&img, format).await {
|
||||
Ok(thumbnails_bytes) => {
|
||||
for (thumb_width, thumbnail) in thumbnails_bytes {
|
||||
let thumb_filename = format!("{}_{}.{}", base_filename, thumb_width, ext);
|
||||
let thumb_filename = format!("{}_{}.{}", base_filename, thumb_width, output_ext);
|
||||
// Загружаем миниатюру в S3
|
||||
if let Err(e) = upload_to_s3(
|
||||
&state.storj_client,
|
||||
|
Reference in New Issue
Block a user