This commit is contained in:
		| @@ -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}; | ||||
|   | ||||
| @@ -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, | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -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); | ||||
|                 } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user