Kabir Soneja created PDFBOX-6232:
------------------------------------
Summary: PDF to Image conversion mis-rendered
(transparency/soft-mask) due to PDFBox 3.0.6 regression
Key: PDFBOX-6232
URL: https://issues.apache.org/jira/browse/PDFBOX-6232
Project: PDFBox
Issue Type: Bug
Reporter: Kabir Soneja
Attachments: pdfbox_softmask_regression_ipfree.pdf
_Regression in PDFBox 3.0.5+ — rendering a page that composites a luminosity
soft-mask (whose mask group is a shading-pattern gradient) through a tiling
pattern inside an isolated transparency group causes the group backdrop to
bleed through as hard-seamed horizontal bands. A region that should be a smooth
gradient instead collapses toward the backdrop color_
_Environment:_ PDFBox tools {{render}} (PDFRenderer / ImageIO), Java 17+,
DeviceRGB, any DPI (observed at 165 DPI).
_Steps to reproduce:_
# Take the attached PDF (single page; no fonts, no text, no metadata; content
is a synthetic blue→green gradient over a dark-red backdrop).
# Render page 1 to an image with 3.0.4 and again with 3.0.6/3.0.7/3.0.8, e.g.:
{{java -jar pdfbox-app-<ver>.jar render -i reproducer.pdf -dpi 165 -format png}}
_Expected (3.0.4):_ the masked region shows a smooth, continuous gradient; the
backdrop is fully covered where the soft-mask luminosity is high. Sampling a
fixed band in the upper third yields a bright, saturated color (blue channel
~220).
_Actual (3.0.5+):_ the same band is broken into hard-edged horizontal seams
with the dark backdrop bleeding through; the sampled band collapses toward the
backdrop (blue channel ~80).
_Structure that triggers it (PDF operators):_
* Page paints an _isolated transparency group_ ({{{}/Group << /S /Transparency
/I true /CS /DeviceRGB >>{}}}).
* Inside the group: a dark backdrop fill, then a fill painted via a _Type-1
tiling pattern_ ({{{}/Pattern cs /P scn{}}}).
* The tiling pattern's content stream sets an ExtGState carrying a _luminosity
soft mask_ ({{{}/SMask << /S /Luminosity /G <group> >>{}}}), then fills using a
_Type-2 shading pattern_ (axial gradient) as the visible color.
* The soft-mask group itself fills via _another Type-2 shading pattern_ (an
axial gradient), giving the mask partial/variable luminosity.
The interaction of (isolated group) × (luminosity soft mask driven by a
shading-pattern gradient) × (tiling pattern) is what regressed — removing any
one of those three elements makes the defect disappear. Solid-color masks/fills
do not trigger it; the shading-pattern (gradient) mask is required.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]