Correct for image orientation when loading image

PEG 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.

Pulled from https://github.com/swaywm/swaybg/pull/68
This commit is contained in:
Neil Muller 2024-06-03 17:21:15 +02:00 committed by Simon Ser
parent f9ce3f193b
commit b70d85ec14

View File

@ -31,8 +31,12 @@ cairo_surface_t *load_background_image(const char *path) {
err->message); err->message);
return NULL; 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); g_object_unref(pixbuf);
image = gdk_cairo_image_surface_create_from_pixbuf(oriented);
g_object_unref(oriented);
#else #else
image = cairo_image_surface_create_from_png(path); image = cairo_image_surface_create_from_png(path);
#endif // HAVE_GDK_PIXBUF #endif // HAVE_GDK_PIXBUF