use alloc::vec::Vec;
use crate::encoder::ImageMetadata;
use crate::mux::{MuxResult, WebPDemuxer, WebPMux};
#[track_caller]
pub fn icc_profile(data: &[u8]) -> MuxResult<Option<Vec<u8>>> {
let demuxer = WebPDemuxer::new(data)?;
Ok(demuxer.icc_profile().map(|s| s.to_vec()))
}
#[track_caller]
pub fn exif(data: &[u8]) -> MuxResult<Option<Vec<u8>>> {
let demuxer = WebPDemuxer::new(data)?;
Ok(demuxer.exif().map(|s| s.to_vec()))
}
#[track_caller]
pub fn xmp(data: &[u8]) -> MuxResult<Option<Vec<u8>>> {
let demuxer = WebPDemuxer::new(data)?;
Ok(demuxer.xmp().map(|s| s.to_vec()))
}
#[track_caller]
pub fn embed(data: &[u8], metadata: &ImageMetadata<'_>) -> MuxResult<Vec<u8>> {
let mut mux = WebPMux::from_data(data)?;
if let Some(icc) = metadata.icc_profile {
mux.set_icc_profile(icc.to_vec());
}
if let Some(exif) = metadata.exif {
mux.set_exif(exif.to_vec());
}
if let Some(xmp) = metadata.xmp {
mux.set_xmp(xmp.to_vec());
}
mux.assemble()
}
#[track_caller]
pub fn embed_icc(data: &[u8], icc_profile: &[u8]) -> MuxResult<Vec<u8>> {
let mut mux = WebPMux::from_data(data)?;
mux.set_icc_profile(icc_profile.to_vec());
mux.assemble()
}
#[track_caller]
pub fn embed_exif(data: &[u8], exif: &[u8]) -> MuxResult<Vec<u8>> {
let mut mux = WebPMux::from_data(data)?;
mux.set_exif(exif.to_vec());
mux.assemble()
}
#[track_caller]
pub fn embed_xmp(data: &[u8], xmp: &[u8]) -> MuxResult<Vec<u8>> {
let mut mux = WebPMux::from_data(data)?;
mux.set_xmp(xmp.to_vec());
mux.assemble()
}
#[track_caller]
pub fn remove_icc(data: &[u8]) -> MuxResult<Vec<u8>> {
let mut mux = WebPMux::from_data(data)?;
mux.clear_icc_profile();
mux.assemble()
}
#[track_caller]
pub fn remove_exif(data: &[u8]) -> MuxResult<Vec<u8>> {
let mut mux = WebPMux::from_data(data)?;
mux.clear_exif();
mux.assemble()
}
#[track_caller]
pub fn remove_xmp(data: &[u8]) -> MuxResult<Vec<u8>> {
let mut mux = WebPMux::from_data(data)?;
mux.clear_xmp();
mux.assemble()
}