diff options
author | Victor Kareh <[email protected]> | 2019-07-08 16:55:43 -0400 |
---|---|---|
committer | raveit65 <[email protected]> | 2019-07-14 08:44:54 +0200 |
commit | 523122f08548d10cc1d09bc035d0d037e551930e (patch) | |
tree | e6d5f989d1741672b66acd363a5d65783996f79c | |
parent | afe865d994a873e2ec86f14820414f4a82825751 (diff) | |
download | eom-523122f08548d10cc1d09bc035d0d037e551930e.tar.bz2 eom-523122f08548d10cc1d09bc035d0d037e551930e.tar.xz |
EomImage: Check GdkPixbuf for an ICC profile before falling back to sRGB
If an image's ICC profile cannot be extracted check whether GdkPixbuf
was able to extract one before falling back to sRGB. This makes it
possible to color correct TIFF images.
https://bugzilla.gnome.org/show_bug.cgi?id=727467
upstream commit:
https://gitlab.gnome.org/GNOME/eog/commit/48e971cb
-rw-r--r-- | src/eom-image.c | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/src/eom-image.c b/src/eom-image.c index aa48161..f173a2f 100644 --- a/src/eom-image.c +++ b/src/eom-image.c @@ -632,10 +632,32 @@ eom_image_apply_display_profile (EomImage *img, cmsHPROFILE screen) if (screen == NULL) return; if (priv->profile == NULL) { - /* Assume sRGB color space for images without ICC profile */ - eom_debug_message (DEBUG_LCMS, "Image has no ICC profile. " - "Assuming sRGB."); - priv->profile = cmsCreate_sRGBProfile (); + /* Check whether GdkPixbuf was able to extract a profile */ + const char* data = gdk_pixbuf_get_option (priv->image, + "icc-profile"); + + if(data) { + gsize profile_size = 0; + guchar *profile_data = g_base64_decode(data, + &profile_size); + + if (profile_data && profile_size > 0) { + eom_debug_message (DEBUG_LCMS, + "Using ICC profile " + "extracted by GdkPixbuf"); + priv->profile = + cmsOpenProfileFromMem(profile_data, + profile_size); + g_free(profile_data); + } + } + + if(priv->profile == NULL) { + /* Assume sRGB color space for images without ICC profile */ + eom_debug_message (DEBUG_LCMS, "Image has no ICC profile. " + "Assuming sRGB."); + priv->profile = cmsCreate_sRGBProfile (); + } } /* TODO: support other colorspaces than RGB */ |