如何在itext中使图像成为合格的掩码候选者?

时间:2015-03-17 10:08:44

标签: image itext mask clipping

我打算使用 itext 中的另一个本地图像 B.jpg 来屏蔽图像,例如 A.jpg ,首先我尝试直接使imageB成为一个掩码,然后我得到了DocumentException:这个图像不能是图像掩码,所以我试着让 B.jpg 一个 rawimage 这里有我的代码:

RandomAccessFile rf = new RandomAccessFile("B.jpg", "rw");
        int size = (int)rf.length();
        byte imagedata[] = new byte[size];
        rf.readFully(data);
        rf.close();
Image mask = Image.getInstance("B.jpg");
        int w =(int) Math.ceil(mask.getWidth());
        int h =(int) Math.ceil(mask.getHeight()); 
mask = Image.getInstance(w,h,1,1,data); 
mask.makemask();

我从 B.jpg 获取 byte [] 数据并尝试重建 B.jpg ,但它不起作用我无法获得正确的图像,那么如何才能使图像成为合格的图像蒙版?有没有其他方法可以在itext中从另一个图像中屏蔽图像?看起来如何剪切图像但是蒙版可以很清晰复杂,不仅可以使用ContentByte绘制矩形或圆形。

2 个答案:

答案 0 :(得分:2)

请查看MakeJpgMask示例。在这个例子中,我拿了两个普通的JPG文件,我用另一个作为掩码,导致一个相当怪异的PDF:jpg_mask.pdf

enter image description here

为实现这一目标,我需要将一个彩色JPEG更改为黑白图像:

public void createPdf(String dest) throws IOException, DocumentException {
    Document document = new Document(PageSize.A4.rotate());
    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(dest));
    document.open();
    Image image = Image.getInstance(IMAGE);
    Image mask = makeBlackAndWhitePng(MASK);
    mask.makeMask();
    image.setImageMask(mask);
    image.scaleAbsolute(PageSize.A4.rotate());
    image.setAbsolutePosition(0, 0);
    document.add(image);
    document.close();
}

public static Image makeBlackAndWhitePng(String image) throws IOException, DocumentException {
    BufferedImage bi = ImageIO.read(new File(image));
    BufferedImage newBi = new BufferedImage(bi.getWidth(), bi.getHeight(), BufferedImage.TYPE_USHORT_GRAY);
    newBi.getGraphics().drawImage(bi, 0, 0, null);
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    ImageIO.write(newBi, "png", baos);
    return Image.getInstance(baos.toByteArray());
}

正如您所看到的,我们已将berlin2013.jpg转换为黑白图像,我们将其用作彩色javaone2013.jpg图像的遮罩。

答案 1 :(得分:1)

图像蒙版必须是单色或灰度,颜色不能。