Code refactoring

This commit is contained in:
Matteo Paonessa 2023-06-11 19:04:27 +02:00
parent ea99785e53
commit d6bf9b77b8
6 changed files with 42 additions and 49 deletions

View File

@ -1,16 +1,16 @@
use image::ImageOutputFormat::Jpeg;
use img_parts::{DynImage, ImageEXIF, ImageICC};
use mozjpeg_sys::*;
use std::{fs, ptr};
use std::{io, mem};
use std::fs::File;
use std::io::Write;
use std::{io, mem};
use std::panic::catch_unwind;
use libc::free;
use crate::resize::resize;
use image::ImageOutputFormat::Jpeg;
use img_parts::{DynImage, ImageEXIF, ImageICC};
use libc::free;
use mozjpeg_sys::*;
use crate::CSParameters;
use crate::resize::resize;
static mut JPEG_ERROR: c_int = 0;
@ -49,7 +49,7 @@ pub fn compress_to_memory(mut in_file: Vec<u8>, parameters: &CSParameters) -> Re
}) {
Ok(cb) => cb,
Err(_) => Err(io::Error::new(io::ErrorKind::Other, format!("Internal JPEG error: {}", JPEG_ERROR)))
}
};
}
}
@ -64,12 +64,12 @@ unsafe fn lossless(
let mut dst_err = mem::zeroed();
src_info.common.err = jpeg_std_error(&mut src_err);
(*src_info.common.err).error_exit = Option::Some(error_handler);
(*src_info.common.err).output_message = Option::Some(error_message_handler);
(*src_info.common.err).error_exit = Some(error_handler);
(*src_info.common.err).output_message = Some(error_message_handler);
dst_info.common.err = jpeg_std_error(&mut dst_err);
(*dst_info.common.err).error_exit = Option::Some(error_handler);
(*dst_info.common.err).output_message = Option::Some(error_message_handler);
(*dst_info.common.err).error_exit = Some(error_handler);
(*dst_info.common.err).output_message = Some(error_message_handler);
jpeg_create_decompress(&mut src_info);
jpeg_create_compress(&mut dst_info);
@ -96,17 +96,7 @@ unsafe fn lossless(
jpeg_write_coefficients(&mut dst_info, dst_coef_arrays);
if parameters.keep_metadata {
let mut marker = src_info.marker_list;
while !marker.is_null() {
jpeg_write_marker(
&mut dst_info,
(*marker).marker as i32,
(*marker).data,
(*marker).data_length,
);
marker = (*marker).next;
}
write_metadata(&mut src_info, &mut dst_info);
}
jpeg_finish_compress(&mut dst_info);
@ -133,12 +123,12 @@ unsafe fn lossy(in_file: Vec<u8>, parameters: &CSParameters) -> Result<Vec<u8>,
let mut dst_err = mem::zeroed();
src_info.common.err = jpeg_std_error(&mut src_err);
(*src_info.common.err).error_exit = Option::Some(error_handler);
(*src_info.common.err).output_message = Option::Some(error_message_handler);
(*src_info.common.err).error_exit = Some(error_handler);
(*src_info.common.err).output_message = Some(error_message_handler);
dst_info.common.err = jpeg_std_error(&mut dst_err);
(*dst_info.common.err).error_exit = Option::Some(error_handler);
(*dst_info.common.err).output_message = Option::Some(error_message_handler);
(*dst_info.common.err).error_exit = Some(error_handler);
(*dst_info.common.err).output_message = Some(error_message_handler);
jpeg_create_decompress(&mut src_info);
jpeg_create_compress(&mut dst_info);
@ -200,17 +190,7 @@ unsafe fn lossy(in_file: Vec<u8>, parameters: &CSParameters) -> Result<Vec<u8>,
jpeg_start_compress(&mut dst_info, true as boolean);
if parameters.keep_metadata {
let mut marker = src_info.marker_list;
while !marker.is_null() {
jpeg_write_marker(
&mut dst_info,
(*marker).marker as i32,
(*marker).data,
(*marker).data_length,
);
marker = (*marker).next;
}
write_metadata(&mut src_info, &mut dst_info);
}
while dst_info.next_scanline < dst_info.image_height {
@ -275,10 +255,22 @@ fn save_metadata(
}
}
unsafe fn write_metadata(src_info: &mut jpeg_decompress_struct, dst_info: &mut jpeg_compress_struct) {
let mut marker = src_info.marker_list;
while !marker.is_null() {
jpeg_write_marker(
dst_info,
(*marker).marker as i32,
(*marker).data,
(*marker).data_length,
);
marker = (*marker).next;
}
}
unsafe extern "C" fn error_handler(cinfo: &mut jpeg_common_struct) {
JPEG_ERROR = (*cinfo.err).msg_code;
panic!("Internal JPEG error: {}", JPEG_ERROR);
}
unsafe extern "C" fn error_message_handler(_cinfo: &mut jpeg_common_struct) {
}
unsafe extern "C" fn error_message_handler(_cinfo: &mut jpeg_common_struct) {}

View File

@ -4,9 +4,9 @@ use alloc::ffi::CString;
use std::{cmp, fs};
use std::error::Error;
use std::ffi::CStr;
use std::os::raw::c_char;
use std::fs::File;
use std::io::Write;
use std::os::raw::c_char;
use crate::utils::{get_filetype, SupportedFileTypes};
@ -208,7 +208,7 @@ pub fn compress_to_size(
input_path: String,
output_path: String,
parameters: &mut CSParameters,
max_output_size: usize
max_output_size: usize,
) -> Result<(), Box<dyn Error>>
{
let file_type = get_filetype(&input_path);

View File

@ -1,7 +1,8 @@
use caesium::{compress, initialize_parameters};
use std::env;
use std::process::ExitCode;
use caesium::{compress, initialize_parameters};
fn main() -> ExitCode {
let args: Vec<String> = env::args().collect();

View File

@ -2,8 +2,8 @@ use std::{fs, io};
use std::fs::File;
use std::io::Write;
use std::num::NonZeroU8;
use image::ImageOutputFormat;
use image::ImageOutputFormat;
use oxipng::Deflaters::{Libdeflater, Zopfli};
use crate::CSParameters;

View File

@ -1,10 +1,10 @@
use image::imageops::FilterType;
use image::io::Reader as ImageReader;
use image::DynamicImage;
use std::io;
use std::io::Cursor;
use image::DynamicImage;
use image::imageops::FilterType;
use image::io::Reader as ImageReader;
#[allow(dead_code)]
pub fn resize(
image_buffer: Vec<u8>,

View File

@ -3,8 +3,8 @@ use std::io;
use std::io::{Read, Write};
use std::ops::Deref;
use crate::resize::resize_image;
use crate::CSParameters;
use crate::resize::resize_image;
pub fn compress(
input_path: String,