mirror of
https://github.com/lovell/sharp.git
synced 2025-07-09 10:30:15 +02:00
Ensure negate op occurs after profile conversion (#4096)
- Adds CMYK to CMYK profile conversion tests - Fixes existing greyscale plus alpha test expectation
This commit is contained in:
parent
b5fddd7c5e
commit
29336f4cc7
@ -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);
|
||||
@ -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);
|
||||
|
BIN
test/fixtures/XCMYK 2017.icc
vendored
Normal file
BIN
test/fixtures/XCMYK 2017.icc
vendored
Normal file
Binary file not shown.
BIN
test/fixtures/expected/colourspace.cmyk-to-cmyk-negated.tif
vendored
Normal file
BIN
test/fixtures/expected/colourspace.cmyk-to-cmyk-negated.tif
vendored
Normal file
Binary file not shown.
BIN
test/fixtures/expected/negate-trans.png
vendored
BIN
test/fixtures/expected/negate-trans.png
vendored
Binary file not shown.
Before Width: | Height: | Size: 8.0 KiB After Width: | Height: | Size: 5.3 KiB |
BIN
test/fixtures/fogra-0-100-100-0.tif
vendored
Normal file
BIN
test/fixtures/fogra-0-100-100-0.tif
vendored
Normal file
Binary file not shown.
1
test/fixtures/index.js
vendored
1
test/fixtures/index.js
vendored
@ -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
|
||||
|
@ -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('XCMYK 2017.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')
|
||||
|
Loading…
x
Reference in New Issue
Block a user