From 8f884f9f1d16b07e17d8c75d8b75e99de4dd314e Mon Sep 17 00:00:00 2001 From: Laurenz Date: Thu, 30 Jan 2025 19:52:32 +0100 Subject: [PATCH] Also hash ICC profile --- crates/typst-library/src/visualize/image/raster.rs | 7 ++++--- crates/typst-pdf/src/image.rs | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/crates/typst-library/src/visualize/image/raster.rs b/crates/typst-library/src/visualize/image/raster.rs index 0a62281fe..ae5b6a151 100644 --- a/crates/typst-library/src/visualize/image/raster.rs +++ b/crates/typst-library/src/visualize/image/raster.rs @@ -170,16 +170,17 @@ impl RasterImage { } /// Access the ICC profile, if any. - pub fn icc(&self) -> Option<&[u8]> { - self.0.icc.as_deref() + pub fn icc(&self) -> Option<&Bytes> { + self.0.icc.as_ref() } } impl Hash for Repr { fn hash(&self, state: &mut H) { - // The image is fully defined by data and format. + // The image is fully defined by data, format, and ICC profile. self.data.hash(state); self.format.hash(state); + self.icc.hash(state); } } diff --git a/crates/typst-pdf/src/image.rs b/crates/typst-pdf/src/image.rs index a88417909..550f60a4b 100644 --- a/crates/typst-pdf/src/image.rs +++ b/crates/typst-pdf/src/image.rs @@ -174,7 +174,7 @@ fn encode_raster_image(image: &RasterImage, interpolate: bool) -> EncodedImage { (Filter::FlateDecode, data, bits_per_component) }; - let compressed_icc = image.icc().map(deflate); + let compressed_icc = image.icc().map(|data| deflate(data)); let alpha = dynamic.color().has_alpha().then(|| encode_alpha(dynamic)); EncodedImage::Raster {