From e6198361e5f53d79563c98dbb2bec13fdc6dd3c1 Mon Sep 17 00:00:00 2001 From: Kleis Auke Wolthuizen Date: Wed, 19 Oct 2022 18:32:04 +0200 Subject: [PATCH 1/2] thumbnail: fix embedded ICC profile conversion (#3027) --- libvips/resample/thumbnail.c | 41 ++++++++++++++++++-------- test/test-suite/helpers/helpers.py | 1 + test/test-suite/images/sample-xyb.jpg | Bin 0 -> 60121 bytes test/test-suite/test_foreign.py | 2 -- test/test-suite/test_resample.py | 19 ++++++++++-- 5 files changed, 47 insertions(+), 16 deletions(-) create mode 100644 test/test-suite/images/sample-xyb.jpg diff --git a/libvips/resample/thumbnail.c b/libvips/resample/thumbnail.c index 8739c20a..a0293957 100644 --- a/libvips/resample/thumbnail.c +++ b/libvips/resample/thumbnail.c @@ -859,20 +859,37 @@ vips_thumbnail_build( VipsObject *object ) in = t[7]; } else if( thumbnail->export_profile ) { - /* We are in one of the resize space (sRGB, scRGB, B_W, GREY16, - * etc.) and we have an export profile. Go to PCS, then export. + /* If there's some kind of import profile, we can transform to + * the output. Otherwise, we are in one of the resize space + * (sRGB, scRGB, B_W, GREY16, etc.) and need to go to PCS, + * then export. */ - g_info( "exporting with %s", - thumbnail->export_profile ); - if( vips_colourspace( in, &t[7], - VIPS_INTERPRETATION_XYZ, NULL ) || - vips_icc_export( t[7], &t[10], - "output_profile", - thumbnail->export_profile, + if( thumbnail->import_profile || + vips_image_get_typeof( in, VIPS_META_ICC_NAME ) ) { + g_info( "transforming with supplied profiles" ); + if( vips_icc_transform( in, &t[7], + thumbnail->export_profile, + "input_profile", thumbnail->import_profile, "intent", thumbnail->intent, - NULL ) ) - return( -1 ); - in = t[10]; + "embedded", TRUE, + NULL ) ) + return( -1 ); + + in = t[7]; + } + else { + g_info( "exporting with %s", + thumbnail->export_profile ); + if( vips_colourspace( in, &t[7], + VIPS_INTERPRETATION_XYZ, NULL ) || + vips_icc_export( t[7], &t[10], + "output_profile", + thumbnail->export_profile, + "intent", thumbnail->intent, + NULL ) ) + return( -1 ); + in = t[10]; + } } else { /* We are in one of the resize spaces and there's no export diff --git a/test/test-suite/helpers/helpers.py b/test/test-suite/helpers/helpers.py index f2dd9753..cbdfbfa3 100644 --- a/test/test-suite/helpers/helpers.py +++ b/test/test-suite/helpers/helpers.py @@ -9,6 +9,7 @@ import pyvips IMAGES = os.path.join(os.path.dirname(__file__), os.pardir, 'images') JPEG_FILE = os.path.join(IMAGES, "sample.jpg") +JPEG_FILE_XYB = os.path.join(IMAGES, "sample-xyb.jpg") TRUNCATED_FILE = os.path.join(IMAGES, "truncated.jpg") SRGB_FILE = os.path.join(IMAGES, "sRGB.icm") MATLAB_FILE = os.path.join(IMAGES, "sample.mat") diff --git a/test/test-suite/images/sample-xyb.jpg b/test/test-suite/images/sample-xyb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6e802dc85b696602d1e55b9bddbeaa013f056d56 GIT binary patch literal 60121 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 Xxu2|jcAS!M= 8.5") + def test_thumbnail_icc(self): + im = pyvips.Image.thumbnail(JPEG_FILE_XYB, 442, export_profile="srgb", intent="perceptual") + + assert im.width == 290 + assert im.height == 442 + assert im.bands == 3 + assert im.bands == 3 + + # the colour distance should not deviate too much + # (i.e. the embedded profile should not be ignored) + im_orig = pyvips.Image.new_from_file(JPEG_FILE) + assert im_orig.de00(im).max() < 10 + def test_similarity(self): im = pyvips.Image.new_from_file(JPEG_FILE) im2 = im.similarity(angle=90) From 982a835eedb67d2ec8de433d73d210bb5beefdd9 Mon Sep 17 00:00:00 2001 From: Sergey Alexandrovich Date: Wed, 19 Oct 2022 22:34:43 +0600 Subject: [PATCH 2/2] spngsave: Don't shift indexed pixels (#3101) --- libvips/foreign/spngsave.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libvips/foreign/spngsave.c b/libvips/foreign/spngsave.c index 1bb2f569..d372666d 100644 --- a/libvips/foreign/spngsave.c +++ b/libvips/foreign/spngsave.c @@ -270,7 +270,7 @@ vips_foreign_save_spng_pack( VipsForeignSaveSpng *spng, VipsPel *q, VipsPel *p, size_t n ) { int pixel_mask = 8 / spng->bitdepth - 1; - int shift = 8 - spng->bitdepth; + int shift = spng->palette ? 0 : 8 - spng->bitdepth; VipsPel bits; size_t x;