Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e6a2d5d

Browse files
committed
Fixes cmyk jpeg decoding. Adds fixtures and tests for same.
1 parent 0e43788 commit e6a2d5d

15 files changed

+2961
-4
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@
22
.DS_Store
33
node_modules/
44
npm-debug.log
5+
.idea*

lib/decoder.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -895,10 +895,10 @@ var JpegImage = (function jpegImage() {
895895
M = 255 - clampTo8bit(Y - 0.3441363 * (Cb - 128) - 0.71413636 * (Cr - 128));
896896
Ye = 255 - clampTo8bit(Y + 1.772 * (Cb - 128));
897897
}
898-
data[offset++] = C;
899-
data[offset++] = M;
900-
data[offset++] = Ye;
901-
data[offset++] = K;
898+
data[offset++] = 255-C;
899+
data[offset++] = 255-M;
900+
data[offset++] = 255-Ye;
901+
data[offset++] = 255-K;
902902
}
903903
}
904904
break;

test/fixtures/cmyk-grey.cmyk

Lines changed: 1056 additions & 0 deletions
Large diffs are not rendered by default.

test/fixtures/cmyk-grey.jpg

90 KB
Loading

test/fixtures/cmyktest.cmyk

130 KB
Binary file not shown.

test/fixtures/cmyktest.jpg

35.4 KB
Loading

test/fixtures/plusshelf-drawing.cmyk

319 KB
Binary file not shown.

test/fixtures/plusshelf-drawing.jpg

44.5 KB
Loading

test/fixtures/rgb.jpg

26 KB
Loading

test/fixtures/rgb.rgb

Lines changed: 36 additions & 0 deletions
Large diffs are not rendered by default.

test/fixtures/tree-cmyk.cmyk

Lines changed: 866 additions & 0 deletions
Large diffs are not rendered by default.

test/fixtures/tree-cmyk.jpg

71.2 KB
Loading

test/fixtures/tree-rgb.jpg

42.8 KB
Loading

test/fixtures/tree-rgb.rgb

Lines changed: 950 additions & 0 deletions
Large diffs are not rendered by default.

test/index.js

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,54 @@ it('should be able to decode a grayscale JPEG', function(t) {
4848
t.end();
4949
});
5050

51+
it('should be able to decode a CMYK jpeg with correct colors', function (t) {
52+
var jpegData = fixture('tree-cmyk.jpg');
53+
var rawImageData = jpeg.decode(jpegData);
54+
t.equal(rawImageData.width, 400);
55+
t.equal(rawImageData.height, 250);
56+
var expected = fixture('tree-cmyk.cmyk');
57+
t.deepEqual(rawImageData.data, expected);
58+
t.end();
59+
});
60+
61+
it('should be able to decode an RGB jpeg with correct colors', function (t) {
62+
var jpegData = fixture('tree-rgb.jpg');
63+
var rawImageData = jpeg.decode(jpegData);
64+
t.equal(rawImageData.width, 400);
65+
t.equal(rawImageData.height, 250);
66+
var expected = fixture('tree-rgb.rgb');
67+
t.deepEqual(rawImageData.data, expected);
68+
t.end();
69+
});
70+
71+
it('should be able to decode a greyscale CMYK jpeg with correct colors', function (t) {
72+
var jpegData = fixture('cmyk-grey.jpg');
73+
var rawImageData = jpeg.decode(jpegData);
74+
t.equal(rawImageData.width, 300);
75+
t.equal(rawImageData.height, 389);
76+
var expected = fixture('cmyk-grey.cmyk');
77+
t.deepEqual(rawImageData.data, expected);
78+
t.end();
79+
});
80+
81+
it('should be able to decode an adobe CMYK jpeg with correct colors', function (t) {
82+
var jpegData = fixture('cmyktest.jpg');
83+
var rawImageData = jpeg.decode(jpegData);
84+
t.equal(rawImageData.width, 300);
85+
t.equal(rawImageData.height, 111);
86+
var expected = fixture('cmyktest.cmyk');
87+
t.deepEqual(rawImageData.data, expected);
88+
89+
var jpegData2 = fixture('plusshelf-drawing.jpg');
90+
var rawImageData2 = jpeg.decode(jpegData2);
91+
t.equal(rawImageData2.width, 350);
92+
t.equal(rawImageData2.height, 233);
93+
var expected2 = fixture('plusshelf-drawing.cmyk');
94+
t.deepEqual(rawImageData2.data, expected2);
95+
96+
t.end();
97+
});
98+
5199
it('should be able to decode a unconventional table JPEG', function (t) {
52100
var jpegData = fixture('unconventional-table.jpg');
53101
var rawImageData = jpeg.decode(jpegData);

0 commit comments

Comments
 (0)