|
|
@ -776,6 +776,25 @@ var JpegStream = (function jpegStream() { |
|
|
|
return false; |
|
|
|
return false; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function isCmykAdobe(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] == 0 && |
|
|
|
|
|
|
|
bytes[i + 15] == 2 ) { |
|
|
|
|
|
|
|
return true; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
// scanning until frame tag
|
|
|
|
|
|
|
|
if (bytes[i] == 0xFF && bytes[i + 1] == 0xC0) |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
function fixAdobeImage(bytes) { |
|
|
|
function fixAdobeImage(bytes) { |
|
|
|
// Inserting 'EMBED' marker after JPEG signature
|
|
|
|
// Inserting 'EMBED' marker after JPEG signature
|
|
|
|
var embedMarker = new Uint8Array([0xFF, 0xEC, 0, 8, 0x45, 0x4D, 0x42, 0x45, |
|
|
|
var embedMarker = new Uint8Array([0xFF, 0xEC, 0, 8, 0x45, 0x4D, 0x42, 0x45, |
|
|
@ -789,7 +808,7 @@ var JpegStream = (function jpegStream() { |
|
|
|
return newBytes; |
|
|
|
return newBytes; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
function constructor(bytes, dict) { |
|
|
|
function constructor(bytes, dict, xref) { |
|
|
|
// TODO: per poppler, some images may have 'junk' before that
|
|
|
|
// TODO: per poppler, some images may have 'junk' before that
|
|
|
|
// need to be removed
|
|
|
|
// need to be removed
|
|
|
|
this.dict = dict; |
|
|
|
this.dict = dict; |
|
|
@ -800,8 +819,9 @@ var JpegStream = (function jpegStream() { |
|
|
|
if (isAdobeImage(bytes)) { |
|
|
|
if (isAdobeImage(bytes)) { |
|
|
|
// when bug 674619 land, let's check if browser can do
|
|
|
|
// when bug 674619 land, let's check if browser can do
|
|
|
|
// normal cmyk and then we won't have to the following
|
|
|
|
// normal cmyk and then we won't have to the following
|
|
|
|
var cs = dict.get('ColorSpace'); |
|
|
|
var cs = xref.fetchIfRef(dict.get('ColorSpace')); |
|
|
|
if (isName(cs) && cs.name === 'DeviceCMYK') { |
|
|
|
if (isName(cs) && cs.name === 'DeviceCMYK') { |
|
|
|
|
|
|
|
//if (isCmykAdobe(bytes)) {
|
|
|
|
this.isNative = false; |
|
|
|
this.isNative = false; |
|
|
|
this.bytes = bytes; |
|
|
|
this.bytes = bytes; |
|
|
|
} else { |
|
|
|
} else { |
|
|
@ -826,7 +846,7 @@ var JpegStream = (function jpegStream() { |
|
|
|
var height = jpegImage.height; |
|
|
|
var height = jpegImage.height; |
|
|
|
var dataLength = width * height * 4; |
|
|
|
var dataLength = width * height * 4; |
|
|
|
var data = new Uint8Array(dataLength); |
|
|
|
var data = new Uint8Array(dataLength); |
|
|
|
jpegImage.getData(data, width, height); |
|
|
|
jpegImage.getData(data, width, height, true); |
|
|
|
this.buffer = data; |
|
|
|
this.buffer = data; |
|
|
|
this.bufferLength = data.length; |
|
|
|
this.bufferLength = data.length; |
|
|
|
}; |
|
|
|
}; |
|
|
|