From 5e5b66f688999a07fc61958c2362b1a70378bf50 Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Tue, 2 Jul 2013 09:46:14 -0500 Subject: [PATCH] Removes browser decoding optimization for JPEG CMYK --- external/jpgjs/jpg.js | 2 -- src/stream.js | 53 ++---------------------------------- test/pdfs/bug887152.pdf.link | 1 + test/test_manifest.json | 8 ++++++ 4 files changed, 11 insertions(+), 53 deletions(-) create mode 100644 test/pdfs/bug887152.pdf.link diff --git a/external/jpgjs/jpg.js b/external/jpgjs/jpg.js index b5f0c95f3..b54556f7d 100644 --- a/external/jpgjs/jpg.js +++ b/external/jpgjs/jpg.js @@ -847,8 +847,6 @@ var JpegImage = (function jpegImage() { } break; case 4: - if (!this.adobe) - throw 'Unsupported color mode (4 components)'; // The default transform for four components is false colorTransform = false; // The adobe transform marker overrides any previous setting diff --git a/src/stream.js b/src/stream.js index 77e6fe463..0d711d519 100644 --- a/src/stream.js +++ b/src/stream.js @@ -811,49 +811,10 @@ var PredictorStream = (function PredictorStreamClosure() { * DecodeStreams. */ var JpegStream = (function JpegStreamClosure() { - function isAdobeImage(bytes) { - var maxBytesScanned = Math.max(bytes.length - 16, 1024); - // Looking for APP14, 'Adobe' - for (var i = 0; i < maxBytesScanned; ++i) { - if (bytes[i] == 0xFF && bytes[i + 1] == 0xEE && - bytes[i + 2] === 0x00 && bytes[i + 3] == 0x0E && - bytes[i + 4] == 0x41 && bytes[i + 5] == 0x64 && - bytes[i + 6] == 0x6F && bytes[i + 7] == 0x62 && - bytes[i + 8] == 0x65 && bytes[i + 9] === 0x00) - return true; - // scanning until frame tag - if (bytes[i] == 0xFF && bytes[i + 1] == 0xC0) - break; - } - return false; - } - - function fixAdobeImage(bytes) { - // Inserting 'EMBED' marker after JPEG signature - var embedMarker = new Uint8Array([0xFF, 0xEC, 0, 8, 0x45, 0x4D, 0x42, 0x45, - 0x44, 0]); - var newBytes = new Uint8Array(bytes.length + embedMarker.length); - newBytes.set(bytes, embedMarker.length); - // copy JPEG header - newBytes[0] = bytes[0]; - newBytes[1] = bytes[1]; - newBytes.set(embedMarker, 2); - return newBytes; - } - function JpegStream(bytes, dict, xref) { // TODO: per poppler, some images may have 'junk' before that // need to be removed this.dict = dict; - - this.isAdobeImage = false; - this.colorTransform = dict.get('ColorTransform') || -1; - - if (isAdobeImage(bytes)) { - this.isAdobeImage = true; - bytes = fixAdobeImage(bytes); - } - this.bytes = bytes; DecodeStream.call(this); @@ -892,14 +853,7 @@ var JpegStream = (function JpegStreamClosure() { JpegStream.prototype.isNativelySupported = function JpegStream_isNativelySupported(xref, res) { var cs = ColorSpace.parse(this.dict.get('ColorSpace', 'CS'), xref, res); - // when bug 674619 lands, let's check if browser can do - // normal cmyk and then we won't need to decode in JS - if (cs.name === 'DeviceGray' || cs.name === 'DeviceRGB') - return true; - if (cs.name === 'DeviceCMYK' && !this.isAdobeImage && - this.colorTransform < 1) - return true; - return false; + return cs.name === 'DeviceGray' || cs.name === 'DeviceRGB'; }; /** * Checks if the image can be decoded by the browser. @@ -908,10 +862,7 @@ var JpegStream = (function JpegStreamClosure() { function JpegStream_isNativelyDecodable(xref, res) { var cs = ColorSpace.parse(this.dict.get('ColorSpace', 'CS'), xref, res); var numComps = cs.numComps; - if (numComps == 1 || numComps == 3) - return true; - - return false; + return numComps == 1 || numComps == 3; }; return JpegStream; diff --git a/test/pdfs/bug887152.pdf.link b/test/pdfs/bug887152.pdf.link new file mode 100644 index 000000000..241b4ff52 --- /dev/null +++ b/test/pdfs/bug887152.pdf.link @@ -0,0 +1 @@ +http://www.nature.com/news/2010/100721/pdf/466432a.pdf diff --git a/test/test_manifest.json b/test/test_manifest.json index c36e25862..46b332c18 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -1071,6 +1071,14 @@ "rounds": 1, "type": "eq" }, + { "id": "bug887152", + "file": "pdfs/bug887152.pdf", + "md5": "783a3e7b1de2cf40a47ffe1f36a41d4f", + "rounds": 1, + "lastPage": 1, + "link": true, + "type": "eq" + }, { "id": "bug816075", "file": "pdfs/bug816075.pdf", "md5": "7ec87c115c1f9ec41234cc7002555e82",