parent
be8c03eb11
commit
dc543af525
701
Cargo.lock
generated
701
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
|
@ -26,6 +26,7 @@ env_logger = "0.11.5"
|
||||||
actix = "0.13.5"
|
actix = "0.13.5"
|
||||||
imageproc = "0.25.0"
|
imageproc = "0.25.0"
|
||||||
ab_glyph = "0.2.29"
|
ab_glyph = "0.2.29"
|
||||||
|
libheif-rs = "1.0.2"
|
||||||
|
|
||||||
[[bin]]
|
[[bin]]
|
||||||
name = "quoter"
|
name = "quoter"
|
||||||
|
|
|
@ -2,7 +2,8 @@ FROM rust AS build
|
||||||
|
|
||||||
# had to add this for open-ssl
|
# had to add this for open-ssl
|
||||||
RUN apt-get update -y && \
|
RUN apt-get update -y && \
|
||||||
apt-get install -y git pkg-config make g++ libssl-dev wget && \
|
apt-get install -y git pkg-config make g++ libssl-dev wget \
|
||||||
|
libheif-dev libtiff-dev && \
|
||||||
rustup target add x86_64-unknown-linux-gnu
|
rustup target add x86_64-unknown-linux-gnu
|
||||||
|
|
||||||
RUN USER=root cargo new --bin quoter
|
RUN USER=root cargo new --bin quoter
|
||||||
|
@ -28,7 +29,8 @@ FROM rust
|
||||||
ENV RUST_BACKTRACE=full
|
ENV RUST_BACKTRACE=full
|
||||||
ENV RUST_LOG=warn
|
ENV RUST_LOG=warn
|
||||||
|
|
||||||
RUN apt-get update && apt install -y openssl libssl-dev
|
RUN apt-get update && apt install -y openssl libssl-dev \
|
||||||
|
libheif1 libtiff5
|
||||||
|
|
||||||
COPY --from=build /quoter/target/release/quoter .
|
COPY --from=build /quoter/target/release/quoter .
|
||||||
|
|
||||||
|
|
|
@ -36,6 +36,8 @@ pub async fn proxy_handler(
|
||||||
"webp" => "image/webp",
|
"webp" => "image/webp",
|
||||||
"gif" => "image/gif",
|
"gif" => "image/gif",
|
||||||
"jfif" => "image/jpeg",
|
"jfif" => "image/jpeg",
|
||||||
|
"heic" | "heif" => "image/heic",
|
||||||
|
"tif" | "tiff" => "image/tiff",
|
||||||
"mp3" => "audio/mpeg",
|
"mp3" => "audio/mpeg",
|
||||||
"wav" => "audio/x-wav",
|
"wav" => "audio/x-wav",
|
||||||
"ogg" => "audio/ogg",
|
"ogg" => "audio/ogg",
|
||||||
|
|
|
@ -105,8 +105,12 @@ fn determine_image_format(extension: &str) -> Result<ImageFormat, actix_web::Err
|
||||||
"gif" => Ok(ImageFormat::Gif),
|
"gif" => Ok(ImageFormat::Gif),
|
||||||
"bmp" => Ok(ImageFormat::Bmp),
|
"bmp" => Ok(ImageFormat::Bmp),
|
||||||
"ico" => Ok(ImageFormat::Ico),
|
"ico" => Ok(ImageFormat::Ico),
|
||||||
"tiff" => Ok(ImageFormat::Tiff),
|
"tiff" | "tif" => Ok(ImageFormat::Tiff),
|
||||||
"webp" => Ok(ImageFormat::WebP),
|
"webp" => Ok(ImageFormat::WebP),
|
||||||
|
"heic" | "heif" => {
|
||||||
|
// Для HEIC мы будем конвертировать в JPEG при сохранении
|
||||||
|
Ok(ImageFormat::Jpeg)
|
||||||
|
},
|
||||||
_ => {
|
_ => {
|
||||||
log::error!("Неподдерживаемый формат изображения: {}", extension);
|
log::error!("Неподдерживаемый формат изображения: {}", extension);
|
||||||
Err(ErrorInternalServerError("Неподдерживаемый формат изображения"))
|
Err(ErrorInternalServerError("Неподдерживаемый формат изображения"))
|
||||||
|
@ -128,7 +132,14 @@ pub async fn thumbdata_save(
|
||||||
let (base_filename, _, extension) = parse_file_path(&original_filename);
|
let (base_filename, _, extension) = parse_file_path(&original_filename);
|
||||||
warn!("detected file extension: {}", extension);
|
warn!("detected file extension: {}", extension);
|
||||||
let ext = extension.to_lowercase();
|
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) {
|
let img = match image::load_from_memory(&original_data) {
|
||||||
Ok(img) => img,
|
Ok(img) => img,
|
||||||
|
@ -140,14 +151,14 @@ pub async fn thumbdata_save(
|
||||||
|
|
||||||
warn!("generate thumbnails for {}", filename);
|
warn!("generate thumbnails for {}", filename);
|
||||||
|
|
||||||
// Определяем формат изображения
|
// Определяем формат изображения для сохранения
|
||||||
let format = determine_image_format(&ext)?;
|
let format = determine_image_format(output_ext)?;
|
||||||
|
|
||||||
// Генерация миниатюр с использованием определённого формата
|
// Генерация миниатюр с использованием определённого формата
|
||||||
match generate_thumbnails(&img, format).await {
|
match generate_thumbnails(&img, format).await {
|
||||||
Ok(thumbnails_bytes) => {
|
Ok(thumbnails_bytes) => {
|
||||||
for (thumb_width, thumbnail) in 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
|
// Загружаем миниатюру в S3
|
||||||
if let Err(e) = upload_to_s3(
|
if let Err(e) = upload_to_s3(
|
||||||
&state.storj_client,
|
&state.storj_client,
|
||||||
|
|
Loading…
Reference in New Issue
Block a user