Skip to content

Commit

Permalink
Merge pull request #12016 from Snuffleupagus/issue-8078
Browse files Browse the repository at this point in the history
Tweak the `QueueOptimizer` to recognize `OPS.paintImageMaskXObject` operators as *repeated* when the "skew" transformation matrix elements are non-zero (issue 8078)
  • Loading branch information
timvandermeij authored Jun 21, 2020
2 parents 3c81b5e + e18fa3f commit c1cb9ee
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 10 deletions.
18 changes: 10 additions & 8 deletions src/core/operator_list.js
Original file line number Diff line number Diff line change
Expand Up @@ -229,22 +229,22 @@ var QueueOptimizer = (function QueueOptimizerClosure() {
var isSameImage = false;
var iTransform, transformArgs;
var firstPIMXOArg0 = argsArray[iFirstPIMXO][0];
if (
argsArray[iFirstTransform][1] === 0 &&
argsArray[iFirstTransform][2] === 0
) {
const firstTransformArg0 = argsArray[iFirstTransform][0],
firstTransformArg1 = argsArray[iFirstTransform][1],
firstTransformArg2 = argsArray[iFirstTransform][2],
firstTransformArg3 = argsArray[iFirstTransform][3];

if (firstTransformArg1 === firstTransformArg2) {
isSameImage = true;
var firstTransformArg0 = argsArray[iFirstTransform][0];
var firstTransformArg3 = argsArray[iFirstTransform][3];
iTransform = iFirstTransform + 4;
var iPIMXO = iFirstPIMXO + 4;
for (q = 1; q < count; q++, iTransform += 4, iPIMXO += 4) {
transformArgs = argsArray[iTransform];
if (
argsArray[iPIMXO][0] !== firstPIMXOArg0 ||
transformArgs[0] !== firstTransformArg0 ||
transformArgs[1] !== 0 ||
transformArgs[2] !== 0 ||
transformArgs[1] !== firstTransformArg1 ||
transformArgs[2] !== firstTransformArg2 ||
transformArgs[3] !== firstTransformArg3
) {
if (q < MIN_IMAGES_IN_MASKS_BLOCK) {
Expand Down Expand Up @@ -272,6 +272,8 @@ var QueueOptimizer = (function QueueOptimizerClosure() {
argsArray.splice(iFirstSave, count * 4, [
firstPIMXOArg0,
firstTransformArg0,
firstTransformArg1,
firstTransformArg2,
firstTransformArg3,
positions,
]);
Expand Down
13 changes: 11 additions & 2 deletions src/display/canvas.js
Original file line number Diff line number Diff line change
Expand Up @@ -2157,9 +2157,11 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
this.paintInlineImageXObject(maskCanvas.canvas);
},

paintImageMaskXObjectRepeat: function CanvasGraphics_paintImageMaskXObjectRepeat(
paintImageMaskXObjectRepeat(
imgData,
scaleX,
skewX = 0,
skewY = 0,
scaleY,
positions
) {
Expand Down Expand Up @@ -2190,7 +2192,14 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
var ctx = this.ctx;
for (var i = 0, ii = positions.length; i < ii; i += 2) {
ctx.save();
ctx.transform(scaleX, 0, 0, scaleY, positions[i], positions[i + 1]);
ctx.transform(
scaleX,
skewX,
skewY,
scaleY,
positions[i],
positions[i + 1]
);
ctx.scale(1, -1);
ctx.drawImage(maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1);
ctx.restore();
Expand Down
1 change: 1 addition & 0 deletions test/pdfs/issue8078.pdf.link
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
https://bugs.ghostscript.com/attachment.cgi?id=7455
8 changes: 8 additions & 0 deletions test/test_manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -711,6 +711,14 @@
"type": "eq",
"about": "Type1 font with |Ref|s in the Differences array of the Encoding dictionary."
},
{ "id": "issue8078",
"file": "pdfs/issue8078.pdf",
"md5": "8b7d74bc24b4157393e4e88a511c05f1",
"link": true,
"rounds": 1,
"lastPage": 1,
"type": "eq"
},
{ "id": "issue8092",
"file": "pdfs/issue8092.pdf",
"md5": "e4f3376b35fd132580246c3db1fbd738",
Expand Down

0 comments on commit c1cb9ee

Please sign in to comment.