use std::fs::File;
use std::io::{Read, Write};
use std::path::Path;
use crate::common::error::Result;
use crate::common::types::{PixelFormat, Subsampling};
use crate::decode::pipeline::Image;
pub fn compress_to_writer<W: Write>(
writer: &mut W,
pixels: &[u8],
width: usize,
height: usize,
pixel_format: PixelFormat,
quality: u8,
subsampling: Subsampling,
) -> Result<()> {
let jpeg_data: Vec<u8> = crate::api::high_level::compress(
pixels,
width,
height,
pixel_format,
quality,
subsampling,
)?;
writer.write_all(&jpeg_data)?;
Ok(())
}
pub fn decompress_from_reader<R: Read>(reader: &mut R) -> Result<Image> {
let mut buffer: Vec<u8> = Vec::new();
reader.read_to_end(&mut buffer)?;
crate::api::high_level::decompress(&buffer)
}
pub fn compress_to_file<P: AsRef<Path>>(
path: P,
pixels: &[u8],
width: usize,
height: usize,
pixel_format: PixelFormat,
quality: u8,
subsampling: Subsampling,
) -> Result<()> {
let mut file: File = File::create(path)?;
compress_to_writer(
&mut file,
pixels,
width,
height,
pixel_format,
quality,
subsampling,
)
}
pub fn decompress_from_file<P: AsRef<Path>>(path: P) -> Result<Image> {
let mut file: File = File::open(path)?;
decompress_from_reader(&mut file)
}