Skip to content

Commit

Permalink
Add test for validating output colors when doing cmyk to cmyk convers…
Browse files Browse the repository at this point in the history
…ion with embedded profiles + move negate to bottom of the pipeline and add test to validate output colors when doing cmyk to cmyk conversion in combination with `negate`

update expected file to match correct output, following #4096 (comment)

use license free cmyk profile, following #4096 (comment)

Add test for validating output colors when doing cmyk to cmyk conversion with embedded profiles + move negate to bottom of the pipeline and add test to validate output colors when doing cmyk to cmyk conversion in combination with `negate`#
  • Loading branch information
adriaanmeuris committed May 13, 2024
1 parent b5fddd7 commit 6695113
Show file tree
Hide file tree
Showing 7 changed files with 44 additions and 5 deletions.
11 changes: 6 additions & 5 deletions src/pipeline.cc
Original file line number Diff line number Diff line change
Expand Up @@ -357,11 +357,6 @@ class PipelineWorker : public Napi::AsyncWorker {
image = sharp::Flatten(image, baton->flattenBackground);
}

// Negate the colours in the image
if (baton->negate) {
image = sharp::Negate(image, baton->negateAlpha);
}

// Gamma encoding (darken)
if (baton->gamma >= 1 && baton->gamma <= 3) {
image = sharp::Gamma(image, 1.0 / baton->gamma);
Expand Down Expand Up @@ -821,6 +816,12 @@ class PipelineWorker : public Napi::AsyncWorker {
} else if (baton->keepMetadata & VIPS_FOREIGN_KEEP_ICC) {
image = sharp::SetProfile(image, inputProfile);
}

// Negate the colours in the image
if (baton->negate) {
image = sharp::Negate(image, baton->negateAlpha);
}

// Override EXIF Orientation tag
if (baton->withMetadataOrientation != -1) {
image = sharp::SetExifOrientation(image, baton->withMetadataOrientation);
Expand Down
Binary file added test/fixtures/XCMYK 2017.icc
Binary file not shown.
Binary file not shown.
Binary file modified test/fixtures/expected/negate-trans.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added test/fixtures/fogra-0-100-100-0.tif
Binary file not shown.
1 change: 1 addition & 0 deletions test/fixtures/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ module.exports = {
inputTiffUncompressed: getPath('uncompressed_tiff.tiff'), // https://code.google.com/archive/p/imagetestsuite/wikis/TIFFTestSuite.wiki file: 0c84d07e1b22b76f24cccc70d8788e4a.tif
inputTiff8BitDepth: getPath('8bit_depth.tiff'),
inputTifftagPhotoshop: getPath('tifftag-photoshop.tiff'), // https://github.com/lovell/sharp/issues/1600
inputTiffFogra: getPath('fogra-0-100-100-0.tif'), // https://github.com/lovell/sharp/issues/4045

inputJp2: getPath('relax.jp2'), // https://www.fnordware.com/j2k/relax.jp2
inputGif: getPath('Crash_test.gif'), // http://upload.wikimedia.org/wikipedia/commons/e/e3/Crash_test.gif
Expand Down
37 changes: 37 additions & 0 deletions test/unit/colourspace.js
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,43 @@ describe('Colour space conversion', function () {
);
});

it('CMYK profile to CMYK profile conversion using perceptual intent', async () => {
const data = await sharp(fixtures.inputTiffFogra)
.resize(320, 240)
.toColourspace('cmyk')
.pipelineColourspace('cmyk')
.withIccProfile(fixtures.path('XCMYK 2017.icc'))
.raw()
.toBuffer();

const [c, m, y, k] = data;
assert.deepStrictEqual(
{ c, m, y, k },
{ c: 1, m: 239, y: 227, k: 5 }
);
});

it('CMYK profile to CMYK profile with negate', (done) => {
sharp(fixtures.inputTiffFogra)
.resize(320, 240)
.toColourspace('cmyk')
.pipelineColourspace('cmyk')
.withIccProfile(fixtures.path('U.S. Web Coated (SWOP) v2.icc'))
.negate()
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual('tiff', info.format);
assert.strictEqual(320, info.width);
assert.strictEqual(240, info.height);
fixtures.assertSimilar(
fixtures.expected('colourspace.cmyk-to-cmyk-negated.tif'),
data,
{ threshold: 0 },
done
);
});
});

it('From sRGB with RGB16 pipeline, resize with gamma, to sRGB', function (done) {
sharp(fixtures.inputPngGradients)
.pipelineColourspace('rgb16')
Expand Down

0 comments on commit 6695113

Please sign in to comment.