From b4fda8146ceb006179e19ed7dd15ee713d493e4b Mon Sep 17 00:00:00 2001 From: Manuel Stoeckl Date: Mon, 15 Apr 2024 19:51:43 -0400 Subject: Correct for image orientation when loading image JPEG and other image formats may include an EXIF orientation tag which indicates in what orientation (rotation and mirroring) the image should be displayed. libgdk-pixbuf does not correct for this when loading an image, but provides a function to apply the transform after the fact, which this commit uses. --- background-image.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/background-image.c b/background-image.c index 53d1b63..3eae832 100644 --- a/background-image.c +++ b/background-image.c @@ -31,8 +31,12 @@ cairo_surface_t *load_background_image(const char *path) { err->message); return NULL; } - image = gdk_cairo_image_surface_create_from_pixbuf(pixbuf); + // Correct for embedded image orientation; typical images are not + // rotated and will be handled efficiently + GdkPixbuf *oriented = gdk_pixbuf_apply_embedded_orientation(pixbuf); g_object_unref(pixbuf); + image = gdk_cairo_image_surface_create_from_pixbuf(oriented); + g_object_unref(oriented); #else image = cairo_image_surface_create_from_png(path); #endif // HAVE_GDK_PIXBUF -- cgit v1.2.3