Skip to content

Commit c4aa80e

Browse files
committed
Upgrade to jpeg-encoder 0.7
1 parent 04cb373 commit c4aa80e

File tree

2 files changed

+16
-27
lines changed

2 files changed

+16
-27
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ rgb = { version = "0.8.48", default-features = false, optional = true }
6060
tiff = { version = "0.10.3", optional = true }
6161
zune-core = { version = "0.5.0", default-features = false, optional = true }
6262
zune-jpeg = { version = "0.5.5", optional = true }
63-
jpeg-encoder = { version = "0.6.1", optional = true, features = ["simd"] }
63+
jpeg-encoder = { version = "0.7.0", optional = true, features = ["simd"] }
6464
serde = { version = "1.0.214", optional = true, features = ["derive"] }
6565
pic-scale-safe = "0.1.5"
6666

src/codecs/jpeg/encoder.rs

Lines changed: 15 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -85,17 +85,15 @@ impl PixelDensity {
8585
}
8686

8787
/// Converts pixel density to the representation used by jpeg-encoder crate
88-
fn to_encoder_repr(self) -> jpeg_encoder::Density {
89-
match self.unit {
90-
PixelDensityUnit::PixelAspectRatio => jpeg_encoder::Density::None, // TODO: https://github.com/vstroebel/jpeg-encoder/issues/21
91-
PixelDensityUnit::Inches => jpeg_encoder::Density::Inch {
92-
x: self.density.0,
93-
y: self.density.1,
94-
},
95-
PixelDensityUnit::Centimeters => jpeg_encoder::Density::Centimeter {
96-
x: self.density.0,
97-
y: self.density.1,
98-
},
88+
fn to_encoder_repr(self) -> jpeg_encoder::PixelDensity {
89+
let unit = match self.unit {
90+
PixelDensityUnit::PixelAspectRatio => jpeg_encoder::PixelDensityUnit::PixelAspectRatio,
91+
PixelDensityUnit::Inches => jpeg_encoder::PixelDensityUnit::Inches,
92+
PixelDensityUnit::Centimeters => jpeg_encoder::PixelDensityUnit::Centimeters,
93+
};
94+
jpeg_encoder::PixelDensity {
95+
density: self.density,
96+
unit,
9997
}
10098
}
10199
}
@@ -238,11 +236,6 @@ impl<W: Write> JpegEncoder<W> {
238236
}
239237
}
240238

241-
// E x i f \0 \0
242-
/// The header for an EXIF APP1 segment
243-
const EXIF_HEADER: [u8; 6] = [0x45, 0x78, 0x69, 0x66, 0x00, 0x00];
244-
const APP1: u8 = 1;
245-
246239
impl<W: Write> ImageEncoder for JpegEncoder<W> {
247240
#[track_caller]
248241
fn write_image(
@@ -265,16 +258,12 @@ impl<W: Write> ImageEncoder for JpegEncoder<W> {
265258
}
266259

267260
fn set_exif_metadata(&mut self, exif: Vec<u8>) -> Result<(), UnsupportedError> {
268-
let mut formatted = EXIF_HEADER.to_vec();
269-
formatted.extend_from_slice(&exif);
270-
self.encoder
271-
.add_app_segment(APP1, &formatted)
272-
.map_err(|_| {
273-
UnsupportedError::from_format_and_kind(
274-
ImageFormat::Jpeg.into(),
275-
UnsupportedErrorKind::GenericFeature("Exif chunk too large".to_string()),
276-
)
277-
})?;
261+
self.encoder.add_exif_metadata(&exif).map_err(|_| {
262+
UnsupportedError::from_format_and_kind(
263+
ImageFormat::Jpeg.into(),
264+
UnsupportedErrorKind::GenericFeature("Exif chunk too large".to_string()),
265+
)
266+
})?;
278267
Ok(())
279268
}
280269

0 commit comments

Comments
 (0)