Search in sources :

Example 1 with PDDeviceCMYK

use of org.apache.pdfbox.pdmodel.graphics.color.PDDeviceCMYK in project pdfbox by apache.

the class JPEGFactory method createFromByteArray.

/**
 * Creates a new JPEG Image XObject from a byte array containing JPEG data.
 *
 * @param document the document where the image will be created
 * @param byteArray bytes of JPEG image
 * @return a new Image XObject
 *
 * @throws IOException if the input stream cannot be read
 */
public static PDImageXObject createFromByteArray(PDDocument document, byte[] byteArray) throws IOException {
    // copy stream
    ByteArrayInputStream byteStream = new ByteArrayInputStream(byteArray);
    // read image
    Raster raster = readJPEGRaster(byteStream);
    byteStream.reset();
    PDColorSpace colorSpace;
    switch(raster.getNumDataElements()) {
        case 1:
            colorSpace = PDDeviceGray.INSTANCE;
            break;
        case 3:
            colorSpace = PDDeviceRGB.INSTANCE;
            break;
        case 4:
            colorSpace = PDDeviceCMYK.INSTANCE;
            break;
        default:
            throw new UnsupportedOperationException("number of data elements not supported: " + raster.getNumDataElements());
    }
    // create PDImageXObject from stream
    PDImageXObject pdImage = new PDImageXObject(document, byteStream, COSName.DCT_DECODE, raster.getWidth(), raster.getHeight(), 8, colorSpace);
    if (colorSpace instanceof PDDeviceCMYK) {
        COSArray decode = new COSArray();
        decode.add(COSInteger.ONE);
        decode.add(COSInteger.ZERO);
        decode.add(COSInteger.ONE);
        decode.add(COSInteger.ZERO);
        decode.add(COSInteger.ONE);
        decode.add(COSInteger.ZERO);
        decode.add(COSInteger.ONE);
        decode.add(COSInteger.ZERO);
        pdImage.setDecode(decode);
    }
    return pdImage;
}
Also used : COSArray(org.apache.pdfbox.cos.COSArray) ByteArrayInputStream(java.io.ByteArrayInputStream) Raster(java.awt.image.Raster) WritableRaster(java.awt.image.WritableRaster) PDDeviceCMYK(org.apache.pdfbox.pdmodel.graphics.color.PDDeviceCMYK) PDColorSpace(org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace)

Aggregations

Raster (java.awt.image.Raster)1 WritableRaster (java.awt.image.WritableRaster)1 ByteArrayInputStream (java.io.ByteArrayInputStream)1 COSArray (org.apache.pdfbox.cos.COSArray)1 PDColorSpace (org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace)1 PDDeviceCMYK (org.apache.pdfbox.pdmodel.graphics.color.PDDeviceCMYK)1