|
|
@ -97,7 +97,12 @@ var PDFImage = (function PDFImageClosure() { |
|
|
|
if (smask) { |
|
|
|
if (smask) { |
|
|
|
this.smask = new PDFImage(xref, res, smask, false); |
|
|
|
this.smask = new PDFImage(xref, res, smask, false); |
|
|
|
} else if (mask) { |
|
|
|
} else if (mask) { |
|
|
|
|
|
|
|
if (isStream(mask)) { |
|
|
|
this.mask = new PDFImage(xref, res, mask, false); |
|
|
|
this.mask = new PDFImage(xref, res, mask, false); |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
// Color key mask (just an array).
|
|
|
|
|
|
|
|
this.mask = mask; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
/** |
|
|
|
/** |
|
|
@ -129,11 +134,15 @@ var PDFImage = (function PDFImageClosure() { |
|
|
|
maskPromise.resolve(null); |
|
|
|
maskPromise.resolve(null); |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
smaskPromise.resolve(null); |
|
|
|
smaskPromise.resolve(null); |
|
|
|
if (mask && isStream(mask)) { |
|
|
|
if (mask) { |
|
|
|
|
|
|
|
if (isStream(mask)) { |
|
|
|
handleImageData(handler, xref, res, mask, maskPromise); |
|
|
|
handleImageData(handler, xref, res, mask, maskPromise); |
|
|
|
} else if (mask) { |
|
|
|
} else if (isArray(mask)) { |
|
|
|
TODO('handle color key masking'); |
|
|
|
maskPromise.resolve(mask); |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
warn('Unsupported mask format.'); |
|
|
|
maskPromise.resolve(null); |
|
|
|
maskPromise.resolve(null); |
|
|
|
|
|
|
|
} |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
maskPromise.resolve(null); |
|
|
|
maskPromise.resolve(null); |
|
|
|
} |
|
|
|
} |
|
|
@ -279,7 +288,7 @@ var PDFImage = (function PDFImageClosure() { |
|
|
|
} |
|
|
|
} |
|
|
|
return output; |
|
|
|
return output; |
|
|
|
}, |
|
|
|
}, |
|
|
|
getOpacity: function PDFImage_getOpacity(width, height) { |
|
|
|
getOpacity: function PDFImage_getOpacity(width, height, image) { |
|
|
|
var smask = this.smask; |
|
|
|
var smask = this.smask; |
|
|
|
var mask = this.mask; |
|
|
|
var mask = this.mask; |
|
|
|
var originalWidth = this.width; |
|
|
|
var originalWidth = this.width; |
|
|
@ -294,6 +303,7 @@ var PDFImage = (function PDFImageClosure() { |
|
|
|
if (sw != width || sh != height) |
|
|
|
if (sw != width || sh != height) |
|
|
|
buf = PDFImage.resize(buf, smask.bpc, 1, sw, sh, width, height); |
|
|
|
buf = PDFImage.resize(buf, smask.bpc, 1, sw, sh, width, height); |
|
|
|
} else if (mask) { |
|
|
|
} else if (mask) { |
|
|
|
|
|
|
|
if (mask instanceof PDFImage) { |
|
|
|
var sw = mask.width; |
|
|
|
var sw = mask.width; |
|
|
|
var sh = mask.height; |
|
|
|
var sh = mask.height; |
|
|
|
buf = new Uint8Array(sw * sh); |
|
|
|
buf = new Uint8Array(sw * sh); |
|
|
@ -306,6 +316,27 @@ var PDFImage = (function PDFImageClosure() { |
|
|
|
|
|
|
|
|
|
|
|
if (sw != width || sh != height) |
|
|
|
if (sw != width || sh != height) |
|
|
|
buf = PDFImage.resize(buf, mask.bpc, 1, sw, sh, width, height); |
|
|
|
buf = PDFImage.resize(buf, mask.bpc, 1, sw, sh, width, height); |
|
|
|
|
|
|
|
} else if (isArray(mask)) { |
|
|
|
|
|
|
|
// Color key mask: if any of the compontents are outside the range
|
|
|
|
|
|
|
|
// then they should be painted.
|
|
|
|
|
|
|
|
buf = new Uint8Array(width * height); |
|
|
|
|
|
|
|
var numComps = this.numComps; |
|
|
|
|
|
|
|
for (var i = 0, ii = width * height; i < ii; ++i) { |
|
|
|
|
|
|
|
var opacity = 0; |
|
|
|
|
|
|
|
var imageOffset = i * numComps; |
|
|
|
|
|
|
|
for (var j = 0; j < numComps; ++j) { |
|
|
|
|
|
|
|
var color = image[imageOffset + j]; |
|
|
|
|
|
|
|
var maskOffset = j * 2; |
|
|
|
|
|
|
|
if (color < mask[maskOffset] || color > mask[maskOffset + 1]) { |
|
|
|
|
|
|
|
opacity = 255; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
buf[i] = opacity; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
error('Unknown mask format.'); |
|
|
|
|
|
|
|
} |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
buf = new Uint8Array(width * height); |
|
|
|
buf = new Uint8Array(width * height); |
|
|
|
for (var i = 0, ii = width * height; i < ii; ++i) |
|
|
|
for (var i = 0, ii = width * height; i < ii; ++i) |
|
|
@ -357,7 +388,7 @@ var PDFImage = (function PDFImageClosure() { |
|
|
|
comps = PDFImage.resize(comps, this.bpc, 3, originalWidth, |
|
|
|
comps = PDFImage.resize(comps, this.bpc, 3, originalWidth, |
|
|
|
originalHeight, width, height); |
|
|
|
originalHeight, width, height); |
|
|
|
var compsPos = 0; |
|
|
|
var compsPos = 0; |
|
|
|
var opacity = this.getOpacity(width, height); |
|
|
|
var opacity = this.getOpacity(width, height, imgArray); |
|
|
|
var opacityPos = 0; |
|
|
|
var opacityPos = 0; |
|
|
|
var length = width * actualHeight * 4; |
|
|
|
var length = width * actualHeight * 4; |
|
|
|
|
|
|
|
|
|
|
|