Merge pull request #4886 from yurydelendik/issue4883
Adds color components decoding to the JPEG
This commit is contained in:
commit
e03ac809d8
@ -811,7 +811,7 @@ var JpegImage = (function jpegImage() {
|
|||||||
var scaleX = this.width / width, scaleY = this.height / height;
|
var scaleX = this.width / width, scaleY = this.height / height;
|
||||||
|
|
||||||
var component, componentScaleX, componentScaleY, blocksPerScanline;
|
var component, componentScaleX, componentScaleY, blocksPerScanline;
|
||||||
var x, y, i, j;
|
var x, y, i, j, k;
|
||||||
var index;
|
var index;
|
||||||
var offset = 0;
|
var offset = 0;
|
||||||
var output;
|
var output;
|
||||||
@ -843,6 +843,17 @@ var JpegImage = (function jpegImage() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// decodeTransform will contains pairs of multiplier (-256..256) and
|
||||||
|
// additive
|
||||||
|
var transform = this.decodeTransform;
|
||||||
|
if (transform) {
|
||||||
|
for (i = 0; i < dataLength;) {
|
||||||
|
for (j = 0, k = 0; j < numComponents; j++, i++, k += 2) {
|
||||||
|
data[i] = ((data[i] * transform[k]) >> 8) + transform[k + 1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return data;
|
return data;
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -852,8 +863,6 @@ var JpegImage = (function jpegImage() {
|
|||||||
return true;
|
return true;
|
||||||
} else if (this.numComponents == 3) {
|
} else if (this.numComponents == 3) {
|
||||||
return true;
|
return true;
|
||||||
} else if (typeof this.colorTransform !== 'undefined') {
|
|
||||||
return !!this.colorTransform;
|
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -878,9 +878,27 @@ var JpegStream = (function JpegStreamClosure() {
|
|||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
var jpegImage = new JpegImage();
|
var jpegImage = new JpegImage();
|
||||||
if (this.colorTransform != -1) {
|
|
||||||
jpegImage.colorTransform = this.colorTransform;
|
// checking if values needs to be transformed before conversion
|
||||||
|
if (this.dict && isArray(this.dict.get('Decode'))) {
|
||||||
|
var decodeArr = this.dict.get('Decode');
|
||||||
|
var bitsPerComponent = this.dict.get('BitsPerComponent') || 8;
|
||||||
|
var decodeArrLength = decodeArr.length;
|
||||||
|
var transform = new Int32Array(decodeArrLength);
|
||||||
|
var transformNeeded = false;
|
||||||
|
var maxValue = (1 << bitsPerComponent) - 1;
|
||||||
|
for (var i = 0; i < decodeArrLength; i += 2) {
|
||||||
|
transform[i] = ((decodeArr[i + 1] - decodeArr[i]) * 256) | 0;
|
||||||
|
transform[i + 1] = (decodeArr[i] * maxValue) | 0;
|
||||||
|
if (transform[i] !== 256 || transform[i + 1] !== 0) {
|
||||||
|
transformNeeded = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (transformNeeded) {
|
||||||
|
jpegImage.decodeTransform = transform;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
jpegImage.parse(this.bytes);
|
jpegImage.parse(this.bytes);
|
||||||
var data = jpegImage.getData(this.drawWidth, this.drawHeight,
|
var data = jpegImage.getData(this.drawWidth, this.drawHeight,
|
||||||
/* forceRGBoutput = */true);
|
/* forceRGBoutput = */true);
|
||||||
|
1
test/pdfs/issue4883.pdf.link
Normal file
1
test/pdfs/issue4883.pdf.link
Normal file
@ -0,0 +1 @@
|
|||||||
|
http://web.archive.org/web/20140603135304/http://www.tipp2014.nl/TIPP2014_3rd_bulletin.pdf
|
@ -1613,6 +1613,16 @@
|
|||||||
"lastPage": 2,
|
"lastPage": 2,
|
||||||
"type": "eq"
|
"type": "eq"
|
||||||
},
|
},
|
||||||
|
{ "id": "issue4883",
|
||||||
|
"file": "pdfs/issue4883.pdf",
|
||||||
|
"md5": "2fac0d9a189ca5fcef8626153d050be8",
|
||||||
|
"rounds": 1,
|
||||||
|
"link": true,
|
||||||
|
"firstPage": 1,
|
||||||
|
"lastPage": 1,
|
||||||
|
"type": "eq",
|
||||||
|
"about": "CMYK JPEG with Decode"
|
||||||
|
},
|
||||||
{ "id": "bug903856",
|
{ "id": "bug903856",
|
||||||
"file": "pdfs/bug903856.pdf",
|
"file": "pdfs/bug903856.pdf",
|
||||||
"md5": "286eaa9d06a5809f4f08f2093cef8f3f",
|
"md5": "286eaa9d06a5809f4f08f2093cef8f3f",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user