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`
  • Loading branch information
adriaanmeuris committed May 8, 2024
1 parent da655a1 commit 2ad29c9
Show file tree
Hide file tree
Showing 6 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/U.S. Web Coated (SWOP) v2.icc
Binary file not shown.
Binary file not shown.
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('U.S. Web Coated (SWOP) v2.icc'))
.raw()
.toBuffer();

const [c, m, y, k] = data;
assert.deepStrictEqual(
{ c, m, y, k },
{ c: 25, m: 255, y: 255, k: 4 }
);
});

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 2ad29c9

Please sign in to comment.