Skip to content

Commit

Permalink
Jpeg encoded with RGB -instead of YCbCr- write the components index a…
Browse files Browse the repository at this point in the history
…s "RGB" in ASCII to say it so

On ISO/IEC 10918-6:2013 (E), section 6.1: (http://www.itu.int/rec/T-REC-T.872-201206-I/en)

"Images encoded with three components are assumed to be RGB data encoded as YCbCr unless the image contains an APP14 marker segment as specified in 6.5.3, in which case the colour encoding is considered either RGB or YCbCr according to the application data of the APP14 marker segment"

But common jpeg libraries consider RGB too if components index are ASCII R (0x52), G (0x47) and B (0x42): https://stackoverflow.com/questions/50798014/determining-color-space-for-jpeg/50861048

Issue #11931
  • Loading branch information
havocbcn committed Jun 4, 2020
1 parent 96ad60f commit 830bb79
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 1 deletion.
13 changes: 12 additions & 1 deletion src/core/jpg.js
Expand Up @@ -991,8 +991,10 @@ var JpegImage = (function JpegImageClosure() {
var components = [],
component;
for (i = 0; i < selectorsCount; i++) {
var componentIndex = frame.componentIds[data[offset++]];
const index = data[offset++];
var componentIndex = frame.componentIds[index];
component = frame.components[componentIndex];
component.index = index;
var tableSpec = data[offset++];
component.huffmanTableDC = huffmanTablesDC[tableSpec >> 4];
component.huffmanTableAC = huffmanTablesAC[tableSpec & 15];
Expand Down Expand Up @@ -1088,6 +1090,7 @@ var JpegImage = (function JpegImageClosure() {
}

this.components.push({
index: component.index,
output: buildComponentData(frame, component),
scaleX: component.h / frame.maxH,
scaleY: component.v / frame.maxV,
Expand Down Expand Up @@ -1183,6 +1186,14 @@ var JpegImage = (function JpegImageClosure() {
// dictionary has a 'ColorTransform' entry, explicitly set to `0`,
// then the colours should *not* be transformed.
return false;
} else if (
this.components[0].index === /* "R" = */ 0x52 &&
this.components[1].index === /* "G" = */ 0x47 &&
this.components[2].index === /* "B" = */ 0x42
) {
// If the three components are indexed as RGB in ASCII
// then the colours should *not* be transformed.
return false;
}
return true;
}
Expand Down
1 change: 1 addition & 0 deletions test/pdfs/.gitignore
Expand Up @@ -147,6 +147,7 @@
!issue1055r.pdf
!issue11713.pdf
!issue1293r.pdf
!issue11931.pdf
!issue1655r.pdf
!issue6541.pdf
!issue2948.pdf
Expand Down
Binary file added test/pdfs/issue11931.pdf
Binary file not shown.
6 changes: 6 additions & 0 deletions test/test_manifest.json
Expand Up @@ -4367,6 +4367,12 @@
"type": "eq",
"forms": true
},
{ "id": "issue11931",
"file": "pdfs/issue11931.pdf",
"md5": "9ea233037992e1f10280420a49e72845",
"rounds": 1,
"type": "eq"
},
{ "id": "annotation-button-widget-annotations",
"file": "pdfs/annotation-button-widget.pdf",
"md5": "5cf23adfff84256d9cfe261bea96dade",
Expand Down

0 comments on commit 830bb79

Please sign in to comment.