summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurenz Stampfl <47084093+LaurenzV@users.noreply.github.com>2025-03-27 11:59:32 +0100
committerGitHub <noreply@github.com>2025-03-27 10:59:32 +0000
commit838a46dbb7124125947bfdafe8ddf97810c5de47 (patch)
tree2d28d9f6c27e8e48c91f47cea0966784027243dc
parent1f1c1338785dc09a43292cf106b4a23b4e1bd86e (diff)
Test all exif rotation types and fix two of them (#6102)
-rw-r--r--Cargo.lock2
-rw-r--r--Cargo.toml2
-rw-r--r--crates/typst-library/src/visualize/image/raster.rs4
-rw-r--r--tests/ref/image-exif-rotation.pngbin0 -> 1392 bytes
-rw-r--r--tests/ref/issue-870-image-rotation.pngbin200 -> 0 bytes
-rw-r--r--tests/suite/visualize/image.typ19
6 files changed, 17 insertions, 10 deletions
diff --git a/Cargo.lock b/Cargo.lock
index d63cec88..630eade2 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -2803,7 +2803,7 @@ dependencies = [
[[package]]
name = "typst-dev-assets"
version = "0.13.1"
-source = "git+https://github.com/typst/typst-dev-assets?rev=9879589#9879589f4b3247b12c5e694d0d7fa86d4d8a198e"
+source = "git+https://github.com/typst/typst-dev-assets?rev=fddbf8b#fddbf8b99506bc370ac0edcd4959add603a7fc92"
[[package]]
name = "typst-docs"
diff --git a/Cargo.toml b/Cargo.toml
index a14124d6..a7324183 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -33,7 +33,7 @@ typst-syntax = { path = "crates/typst-syntax", version = "0.13.1" }
typst-timing = { path = "crates/typst-timing", version = "0.13.1" }
typst-utils = { path = "crates/typst-utils", version = "0.13.1" }
typst-assets = { git = "https://github.com/typst/typst-assets", rev = "ab1295f" }
-typst-dev-assets = { git = "https://github.com/typst/typst-dev-assets", rev = "9879589" }
+typst-dev-assets = { git = "https://github.com/typst/typst-dev-assets", rev = "fddbf8b" }
arrayvec = "0.7.4"
az = "1.2"
base64 = "0.22"
diff --git a/crates/typst-library/src/visualize/image/raster.rs b/crates/typst-library/src/visualize/image/raster.rs
index 0883fe71..453b9406 100644
--- a/crates/typst-library/src/visualize/image/raster.rs
+++ b/crates/typst-library/src/visualize/image/raster.rs
@@ -325,12 +325,12 @@ fn apply_rotation(image: &mut DynamicImage, rotation: u32) {
ops::flip_horizontal_in_place(image);
*image = image.rotate270();
}
- 6 => *image = image.rotate90(),
+ 6 => *image = image.rotate270(),
7 => {
ops::flip_horizontal_in_place(image);
*image = image.rotate90();
}
- 8 => *image = image.rotate270(),
+ 8 => *image = image.rotate90(),
_ => {}
}
}
diff --git a/tests/ref/image-exif-rotation.png b/tests/ref/image-exif-rotation.png
new file mode 100644
index 00000000..a319a5c5
--- /dev/null
+++ b/tests/ref/image-exif-rotation.png
Binary files differ
diff --git a/tests/ref/issue-870-image-rotation.png b/tests/ref/issue-870-image-rotation.png
deleted file mode 100644
index c321a1a9..00000000
--- a/tests/ref/issue-870-image-rotation.png
+++ /dev/null
Binary files differ
diff --git a/tests/suite/visualize/image.typ b/tests/suite/visualize/image.typ
index 7ce0c8c0..9a77870a 100644
--- a/tests/suite/visualize/image.typ
+++ b/tests/suite/visualize/image.typ
@@ -247,12 +247,6 @@ A #box(image("/assets/images/tiger.jpg", height: 1cm, width: 80%)) B
format: "rgba8",
)
---- issue-870-image-rotation ---
-// Ensure that EXIF rotation is applied.
-// https://github.com/image-rs/image/issues/1045
-// File is from https://magnushoff.com/articles/jpeg-orientation/
-#image("/assets/images/f2t.jpg", width: 10pt)
-
--- issue-measure-image ---
// Test that image measurement doesn't turn `inf / some-value` into 0pt.
#context {
@@ -267,3 +261,16 @@ A #box(image("/assets/images/tiger.jpg", height: 1cm, width: 80%)) B
--- issue-3733-dpi-svg ---
#set page(width: 200pt, height: 200pt, margin: 0pt)
#image("/assets/images/relative.svg")
+
+--- image-exif-rotation ---
+#let data = read("/assets/images/f2t.jpg", encoding: none)
+
+#let rotations = range(1, 9)
+#let rotated(v) = image(data.slice(0, 49) + bytes((v,)) + data.slice(50), width: 10pt)
+
+#set page(width: auto)
+#table(
+ columns: rotations.len(),
+ ..rotations.map(v => raw(str(v), lang: "typc")),
+ ..rotations.map(rotated)
+)