From 833aaead569ab6a3630700cc735c63d4afa26162 Mon Sep 17 00:00:00 2001 From: Lovell Fuller Date: Mon, 11 Nov 2019 22:16:28 +0000 Subject: [PATCH] Ensure modulate can co-exist with other colour ops #1958 --- docs/changelog.md | 3 +++ src/operations.cc | 12 ++++++++++-- test/fixtures/expected/modulate-linear.jpg | Bin 0 -> 63220 bytes test/unit/modulate.js | 17 +++++++++++++++++ 4 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 test/fixtures/expected/modulate-linear.jpg diff --git a/docs/changelog.md b/docs/changelog.md index 256c213a..886b4936 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -14,6 +14,9 @@ Requires libvips v8.8.1. [#1952](https://github.com/lovell/sharp/pull/1952) [@pouya-eghbali](https://github.com/pouya-eghbali) +* Ensure `modulate` and other colour-based operations can co-exist. + [#1958](https://github.com/lovell/sharp/issues/1958) + #### v0.23.2 - 28th October 2019 * Add `background` option to tile output operation. diff --git a/src/operations.cc b/src/operations.cc index ea2732ba..9f722971 100644 --- a/src/operations.cc +++ b/src/operations.cc @@ -191,12 +191,20 @@ namespace sharp { VImage alpha = image[image.bands() - 1]; return RemoveAlpha(image) .colourspace(VIPS_INTERPRETATION_LCH) - .linear({brightness, saturation, 1}, {0, 0, static_cast(hue)}) + .linear( + { brightness, saturation, 1}, + { 0.0, 0.0, static_cast(hue) } + ) + .colourspace(VIPS_INTERPRETATION_sRGB) .bandjoin(alpha); } else { return image .colourspace(VIPS_INTERPRETATION_LCH) - .linear({brightness, saturation, 1}, {0, 0, static_cast(hue)}); + .linear( + { brightness, saturation, 1 }, + { 0.0, 0.0, static_cast(hue) } + ) + .colourspace(VIPS_INTERPRETATION_sRGB); } } diff --git a/test/fixtures/expected/modulate-linear.jpg b/test/fixtures/expected/modulate-linear.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bd7899fa3682f76506a9488ec5cee075be52f262 GIT binary patch literal 63220 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⋙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 literal 0 HcmV?d00001 diff --git a/test/unit/modulate.js b/test/unit/modulate.js index b5f2ee62..c187b48a 100644 --- a/test/unit/modulate.js +++ b/test/unit/modulate.js @@ -122,4 +122,21 @@ describe('Modulate', function () { }); }); }); + + it('should be able to use linear and modulate together', function () { + const base = 'modulate-linear.jpg'; + const actual = fixtures.path('output.' + base); + const expected = fixtures.expected(base); + + const contrast = 1.5; + const brightness = 0.5; + + return sharp(fixtures.testPattern) + .linear(contrast, -(128 * contrast) + 128) + .modulate({ brightness }) + .toFile(actual) + .then(function () { + fixtures.assertMaxColourDistance(actual, expected); + }); + }); });