diff --git a/crates/typst-library/src/visualize/image/raster.rs b/crates/typst-library/src/visualize/image/raster.rs index b790f949c..677127e00 100644 --- a/crates/typst-library/src/visualize/image/raster.rs +++ b/crates/typst-library/src/visualize/image/raster.rs @@ -21,6 +21,7 @@ struct Repr { data: Bytes, format: RasterFormat, dynamic: Arc, + is_rotated: bool, icc: Option>, dpi: Option, } @@ -51,15 +52,17 @@ impl RasterImage { .read_from_container(&mut std::io::Cursor::new(&data)) .ok(); + let mut is_rotated = false; // Apply rotation from EXIF metadata. if let Some(rotation) = exif.as_ref().and_then(exif_rotation) { apply_rotation(&mut dynamic, rotation); + is_rotated = true; } // Extract pixel density. let dpi = determine_dpi(&data, exif.as_ref()); - Ok(Self(Arc::new(Repr { data, format, dynamic: Arc::new(dynamic), icc, dpi }))) + Ok(Self(Arc::new(Repr { data, format, is_rotated, dynamic: Arc::new(dynamic), icc, dpi }))) } /// The raw image data. @@ -77,6 +80,11 @@ impl RasterImage { self.dynamic().width() } + /// Whether the image has been rotated due to EXIF metadata. + pub fn is_rotated(&self) -> bool { + self.0.is_rotated + } + /// The image's pixel height. pub fn height(&self) -> u32 { self.dynamic().height() diff --git a/crates/typst-pdf/src/image.rs b/crates/typst-pdf/src/image.rs index bc3023d4c..0484920b0 100644 --- a/crates/typst-pdf/src/image.rs +++ b/crates/typst-pdf/src/image.rs @@ -109,7 +109,12 @@ impl CustomImage for PdfImage { pub(crate) fn raster(raster: RasterImage) -> Option { match raster.format() { RasterFormat::Jpg => { - krilla::image::Image::from_jpeg(Arc::new(raster.data().clone())) + if !raster.is_rotated() { + krilla::image::Image::from_jpeg(Arc::new(raster.data().clone())) + } else { + // Can't embed original JPEG data if it needed to be rotated. + krilla::image::Image::from_custom(PdfImage::new(raster)) + } } _ => krilla::image::Image::from_custom(PdfImage::new(raster)), } diff --git a/crates/typst-pdf/src/paint.rs b/crates/typst-pdf/src/paint.rs index 0a45678f4..334214e6c 100644 --- a/crates/typst-pdf/src/paint.rs +++ b/crates/typst-pdf/src/paint.rs @@ -208,7 +208,6 @@ fn convert_gradient( }; let angle = rotation; - println!("angle: {:?}", angle); let mut stops: Vec> = vec![];