Not sure if this is strictly a bug but it is certainly an ‘interesting’ way to use the PDF spec and unduly complex.
When you create an image in a PDF, you can also give it an SMask (a stencil which allows you to only show part of the image). So far so good….
Have a look at this image as shown in the PDF Object viewer in Adobe acrobat.
This image has an indexed Colorspace with just 1 colour defined and the image itself is a solid block of data. The actual image is the stencil shape which is found on the SMask and effectively cutout from the solid image by the SMask. So the you need to build the image from the 2 separate datastreams.
What makes it complicated is that there is a actually no need for this complexity – the image data could just have been added as the original image data (it just needs inverting). In fact that is how we handle these cases in our Java PDF viewer, spotting the blank image and using the SMask data reversed.
This post is part of our “Understanding the PDF File Format” series. In each article, we discuss a PDF feature, bug, gotcha or tip. If you wish to learn more about PDF, we have 13 years worth of PDF knowledge and tips, so click here to visit our series index!
IDRsolutions develop a Java PDF library, a PDF forms to HTML5 converter, a PDF to HTML5 or SVG converter and a Java Image Library that doubles as an ImageIO replacement. On the blog our team post about anything interesting they learn about.