我打算使用 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绘制矩形或圆形。
答案 0 :(得分:2)
请查看MakeJpgMask示例。在这个例子中,我拿了两个普通的JPG文件,我用另一个作为掩码,导致一个相当怪异的PDF:jpg_mask.pdf
为实现这一目标,我需要将一个彩色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)
图像蒙版必须是单色或灰度,颜色不能。