mirror of
https://github.com/mozilla/pdf.js.git
synced 2025-04-23 00:28:06 +02:00
Adds cmyk jpg support. Treats the cmyk jpg as a regular stream.
This commit is contained in:
parent
234ec25351
commit
9bb2b881b0
8 changed files with 47 additions and 18 deletions
|
@ -546,7 +546,7 @@ var PDFDoc = (function pdfDoc() {
|
|||
switch (type) {
|
||||
case 'JpegStream':
|
||||
var IR = data[2];
|
||||
new JpegImage(id, IR, this.objs);
|
||||
new JpegImageLoader(id, IR, this.objs);
|
||||
break;
|
||||
case 'Font':
|
||||
var name = data[2];
|
||||
|
|
|
@ -179,7 +179,7 @@ var PartialEvaluator = (function partialEvaluator() {
|
|||
var w = dict.get('Width', 'W');
|
||||
var h = dict.get('Height', 'H');
|
||||
|
||||
if (image instanceof JpegStream) {
|
||||
if (image instanceof JpegStream && image.isNative) {
|
||||
var objId = 'img_' + uniquePrefix + (++self.objIdCounter);
|
||||
handler.send('obj', [objId, 'JpegStream', image.getIR()]);
|
||||
|
||||
|
|
12
src/image.js
12
src/image.js
|
@ -229,12 +229,12 @@ var PDFImage = (function pdfImage() {
|
|||
return constructor;
|
||||
})();
|
||||
|
||||
var JpegImage = (function jpegImage() {
|
||||
function JpegImage(objId, imageData, objs) {
|
||||
var JpegImageLoader = (function jpegImage() {
|
||||
function JpegImageLoader(objId, imageData, objs) {
|
||||
var src = 'data:image/jpeg;base64,' + window.btoa(imageData);
|
||||
|
||||
var img = new Image();
|
||||
img.onload = (function jpegImageOnload() {
|
||||
img.onload = (function jpegImageLoaderOnload() {
|
||||
this.loaded = true;
|
||||
|
||||
objs.resolve(objId, this);
|
||||
|
@ -246,12 +246,12 @@ var JpegImage = (function jpegImage() {
|
|||
this.domImage = img;
|
||||
}
|
||||
|
||||
JpegImage.prototype = {
|
||||
getImage: function jpegImageGetImage() {
|
||||
JpegImageLoader.prototype = {
|
||||
getImage: function jpegImageLoaderGetImage() {
|
||||
return this.domImage;
|
||||
}
|
||||
};
|
||||
|
||||
return JpegImage;
|
||||
return JpegImageLoader;
|
||||
})();
|
||||
|
||||
|
|
|
@ -793,20 +793,46 @@ var JpegStream = (function jpegStream() {
|
|||
// TODO: per poppler, some images may have 'junk' before that
|
||||
// need to be removed
|
||||
this.dict = dict;
|
||||
this.isNative = true;
|
||||
|
||||
if (isAdobeImage(bytes))
|
||||
bytes = fixAdobeImage(bytes);
|
||||
if (isAdobeImage(bytes)) {
|
||||
// when bug 674619 land, let's check if browser can do
|
||||
// normal cmyk and then we won't have to the following
|
||||
var cs = dict.get('ColorSpace');
|
||||
if (isName(cs) && cs.name === 'DeviceCMYK') {
|
||||
this.isNative = false;
|
||||
this.bytes = bytes;
|
||||
} else {
|
||||
bytes = fixAdobeImage(bytes);
|
||||
this.src = bytesToString(bytes);
|
||||
}
|
||||
} else {
|
||||
this.src = bytesToString(bytes);
|
||||
}
|
||||
|
||||
this.src = bytesToString(bytes);
|
||||
DecodeStream.call(this);
|
||||
}
|
||||
|
||||
constructor.prototype = {
|
||||
getIR: function jpegStreamGetIR() {
|
||||
return this.src;
|
||||
},
|
||||
getChar: function jpegStreamGetChar() {
|
||||
constructor.prototype = Object.create(DecodeStream.prototype);
|
||||
|
||||
constructor.prototype.ensureBuffer = function jpegStreamEnsureBuffer(req) {
|
||||
if (this.bufferLength)
|
||||
return;
|
||||
var jpegImage = new JpegImage();
|
||||
jpegImage.parse(this.bytes);
|
||||
var width = jpegImage.width;
|
||||
var height = jpegImage.height;
|
||||
var dataLength = width * height * 4;
|
||||
var data = new Uint8Array(dataLength);
|
||||
jpegImage.getData(data, width, height);
|
||||
this.buffer = data;
|
||||
this.bufferLength = data.length;
|
||||
};
|
||||
constructor.prototype.getIR = function jpegStreamGetIR() {
|
||||
return this.src;
|
||||
};
|
||||
constructor.prototype.getChar = function jpegStreamGetChar() {
|
||||
error('internal error: getChar is not valid on JpegStream');
|
||||
}
|
||||
};
|
||||
|
||||
return constructor;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue