@@ -32,6 +32,7 @@ pub struct CompressionResult {
32
32
pub struct CompressionOptions {
33
33
pub quality : Option < u32 > ,
34
34
pub max_size : Option < usize > ,
35
+ pub lossless : bool ,
35
36
pub exif : bool ,
36
37
pub png_opt_level : u8 ,
37
38
pub zopfli : bool ,
@@ -243,6 +244,8 @@ fn build_compression_parameters(
243
244
parameters. webp . quality = quality;
244
245
parameters. gif . quality = quality;
245
246
247
+ parameters. optimize = options. lossless ;
248
+
246
249
parameters. keep_metadata = options. exif ;
247
250
248
251
parameters. png . optimization_level = options. png_opt_level ;
@@ -703,6 +706,13 @@ mod tests {
703
706
assert ! ( results. iter( ) . all( |r| matches!( r. status, CompressionStatus :: Success ) ) ) ;
704
707
assert ! ( results. iter( ) . all( |r| fs:: exists( & r. output_path) . unwrap_or( false ) ) ) ;
705
708
709
+ options. quality = Some ( 100 ) ;
710
+ options. lossless = true ;
711
+ options. overwrite_policy = OverwritePolicy :: All ;
712
+ results = start_compression ( & input_files, & options, progress_bar. clone ( ) , true ) ;
713
+ assert ! ( results. iter( ) . all( |r| matches!( r. status, CompressionStatus :: Success ) ) ) ;
714
+ assert ! ( results. iter( ) . all( |r| fs:: exists( & r. output_path) . unwrap_or( false ) ) ) ;
715
+
706
716
options. quality = Some ( 80 ) ;
707
717
options. keep_dates = true ;
708
718
results = start_compression ( & input_files, & options, progress_bar. clone ( ) , false ) ;
@@ -740,9 +750,11 @@ mod tests {
740
750
} ) ) ;
741
751
assert ! ( results. iter( ) . all( |r| fs:: exists( & r. output_path) . unwrap_or( false ) ) ) ;
742
752
}
753
+
743
754
fn setup_options ( ) -> CompressionOptions {
744
755
CompressionOptions {
745
756
quality : Some ( 80 ) ,
757
+ lossless : false ,
746
758
output_folder : None ,
747
759
same_folder_as_input : false ,
748
760
overwrite_policy : OverwritePolicy :: All ,
0 commit comments