higher quality images
Some checks failed
test / cargo test (push) Failing after 1m12s

This commit is contained in:
2025-07-10 23:48:43 +02:00
parent 8e3e8952a6
commit b1bc1f4701
3 changed files with 32 additions and 15 deletions

View File

@@ -1,7 +1,7 @@
use core::fmt;
use std::path::Path;
use image::{image_dimensions, ImageReader};
use image::image_dimensions;
use indoc::formatdoc;
use pulldown_cmark::{CodeBlockKind, Event, Options, Parser, Tag, TagEnd};
use syntect::{highlighting::ThemeSet, html::highlighted_html_for_string, parsing::SyntaxSet};

View File

@@ -1,5 +1,4 @@
use image::ImageFormat;
#[allow(dead_code)]
#[derive(Debug, PartialEq, Clone, Copy)]
pub enum ExportFormat {
Jpeg,
@@ -25,12 +24,4 @@ impl ExportFormat {
ExportFormat::Png => "image/png",
}
}
pub fn get_image_format(&self) -> ImageFormat {
match self {
ExportFormat::Jpeg => ImageFormat::Jpeg,
ExportFormat::Avif => ImageFormat::Avif,
ExportFormat::Svg => ImageFormat::Jpeg, // TODO what now?
ExportFormat::Png => ImageFormat::Png,
}
}
}

View File

@@ -1,6 +1,14 @@
use std::{fs::create_dir_all, path::Path};
use std::{
fs::{create_dir_all, File},
io::BufWriter,
path::Path,
};
use image::{imageops::FilterType, DynamicImage};
use image::{
codecs::{jpeg::JpegEncoder, png::PngEncoder},
imageops::FilterType,
DynamicImage,
};
use rayon::iter::{IntoParallelRefIterator, ParallelIterator};
use tracing::{debug, error};
@@ -33,8 +41,26 @@ pub fn generate_images(
create_dir_all(parent_dir).unwrap();
}
let result = resized.save_with_format(&save_path, format.get_image_format());
match result {
let encode = {
let buffered_file_write = &mut BufWriter::new(File::create(&save_path).unwrap()); // always seekable
match format {
ExportFormat::Jpeg => {
let encoder = JpegEncoder::new_with_quality(buffered_file_write, 87);
resized.write_with_encoder(encoder)
}
ExportFormat::Avif => todo!(),
ExportFormat::Svg => todo!(),
ExportFormat::Png => {
let encoder = PngEncoder::new_with_quality(
buffered_file_write,
image::codecs::png::CompressionType::Best,
image::codecs::png::FilterType::Adaptive,
);
resized.write_with_encoder(encoder)
}
}
};
match encode {
Err(err) => {
error!("Failed to generate {:?} - {:?}", &save_path, err);
}