Skip to content

Commit 7a10a82

Browse files
0rvarCharlieS1103
authored andcommitted
Switch to jpeg2k crate, swap out handling
1 parent a881a57 commit 7a10a82

File tree

2 files changed

+30
-22
lines changed

2 files changed

+30
-22
lines changed

Cargo.toml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@ readme = "README.md"
1111
[dependencies]
1212
byteorder = "1"
1313
png = { version = "0.16", optional = true }
14-
jp2k = "0.3.1"
15-
rips = "0.3.0"
14+
jpeg2k = "0.6.6"
15+
16+
1617
[features]
1718
default = ["pngio"]
1819
pngio = ["png"]

src/element.rs

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -114,28 +114,35 @@ impl IconElement {
114114
Encoding::JP2PNG => {
115115
let image: Image;
116116
if self.data.starts_with(&JPEG_2000_FILE_MAGIC_NUMBER) {
117-
let bytes = &self.data[12..];
118-
let codec = jp2k::Codec::jp2();
119-
let stream = jp2k::Stream::from_bytes(bytes).unwrap();
117+
let j2k_image = match jpeg2k::Image::from_bytes(&self.data) {
118+
Ok(image) => image,
119+
Err(e) => {
120+
return Err(io::Error::new(
121+
io::ErrorKind::InvalidData,
122+
e,
123+
))
124+
}
125+
};
126+
let alpha_default = 255u8; // Full opacity
127+
let pixels =
128+
j2k_image.get_pixels(Some(alpha_default)).map_err(
129+
|e| io::Error::new(io::ErrorKind::InvalidData, e),
130+
)?;
120131

121-
let jp2k::ImageBuffer { buffer, width, height, num_bands } = jp2k::ImageBuffer::build(
122-
codec,
123-
stream,
124-
jp2k::DecodeParams::default().with_reduce_factor(1),
125-
)
126-
.unwrap();
132+
let pixel_format = match pixels.format {
133+
jpeg2k::ImageFormat::L8 => PixelFormat::Gray,
134+
jpeg2k::ImageFormat::La8 => PixelFormat::GrayAlpha,
135+
jpeg2k::ImageFormat::Rgb8 => PixelFormat::RGB,
136+
jpeg2k::ImageFormat::Rgba8 => PixelFormat::RGBA,
137+
};
127138

128-
let image_rip = rips::Image::from_memory(
129-
buffer,
130-
width as i32,
131-
height as i32,
132-
num_bands as i32,
133-
rips::VipsBandFormat::VIPS_FORMAT_UCHAR,
134-
)
135-
.unwrap();
136-
image = Image::read_png(io::Cursor::new(image_rip.to_bytes())).unwrap()
137-
138-
}else{
139+
image = Image::from_data(
140+
pixel_format,
141+
pixels.width,
142+
pixels.height,
143+
pixels.data,
144+
)?;
145+
} else {
139146
image = Image::read_png(io::Cursor::new(&self.data))?;
140147
}
141148

0 commit comments

Comments
 (0)