Browse Source

Optimized PDFImage_undoPreblend

p01 11 years ago
parent
commit
27d532efeb
  1. 20
      src/core/image.js

20
src/core/image.js

@ -463,27 +463,29 @@ var PDFImage = (function PDFImageClosure() {
if (!matte) { if (!matte) {
return; return;
} }
function clamp(value) {
return (value < 0 ? 0 : (value > 255 ? 255 : value)) | 0;
}
var matteRgb = this.colorSpace.getRgb(matte, 0); var matteRgb = this.colorSpace.getRgb(matte, 0);
var matteR = matteRgb[0];
var matteG = matteRgb[1];
var matteB = matteRgb[2];
var length = width * height * 4; var length = width * height * 4;
var r, g, b;
for (var i = 0; i < length; i += 4) { for (var i = 0; i < length; i += 4) {
var alpha = buffer[i + 3]; var alpha = buffer[i + 3];
if (alpha === 0) { if (alpha === 0) {
// according formula we have to get Infinity in all components // according formula we have to get Infinity in all components
// making it white (tipical paper color) should be okay // making it white (typical paper color) should be okay
buffer[i] = 255; buffer[i] = 255;
buffer[i + 1] = 255; buffer[i + 1] = 255;
buffer[i + 2] = 255; buffer[i + 2] = 255;
continue; continue;
} }
var k = 255 / alpha; var k = 255 / alpha;
buffer[i] = clamp((buffer[i] - matteRgb[0]) * k + matteRgb[0]); r = (buffer[i] - matteR) * k + matteR;
buffer[i + 1] = clamp((buffer[i + 1] - matteRgb[1]) * k + matteRgb[1]); g = (buffer[i + 1] - matteG) * k + matteG;
buffer[i + 2] = clamp((buffer[i + 2] - matteRgb[2]) * k + matteRgb[2]); b = (buffer[i + 2] - matteB) * k + matteB;
buffer[i] = r <= 0 ? 0 : r >= 255 ? 255 : r | 0;
buffer[i + 1] = g <= 0 ? 0 : g >= 255 ? 255 : g | 0;
buffer[i + 2] = b <= 0 ? 0 : b >= 255 ? 255 : b | 0;
} }
}, },

Loading…
Cancel
Save