我已经使用BufferedImage类从pdf生成图像。我正在使用下面提到的代码片段获取8位RGBA,但我无法将其转换为16位RGBA。
int page = 0;
BufferedImage bim = new BufferedImage(100, 100, BufferedImage.TYPE_USHORT_565_RGB);
bim = pdfRenderer.renderImage(page);
String fileName = OUTPUT_DIR + "image-" + page + ".png";
ImageIOUtil.writeImage(bim, fileName, 1);
发布于 2020-11-26 00:03:55
要创建每个样本(或通道) 16位的BufferedImage
并将其存储为PNG,可以使用以下代码:
ComponentColorModel colorModel = new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB), true, false, Transparency.TRANSLUCENT, DataBuffer.TYPE_USHORT);
BufferedImage image = new BufferedImage(colorModel, colorModel.createCompatibleWritableRaster(100, 100), colorModel.isAlphaPremultiplied(), null);
if (!ImageIO.write(image, "PNG", new File("test.png"))) {
System.err.println("Could not write PNG: " + image);
}
从代码中,我假设您使用的是PDFBox。如果您使用的是PDFBox,则可以使用ImageIOUtil.writeImage
而不是ImageIO.write
。但是您可能希望将DPI设置为比1
更合理的值……?
还要注意,代码中的image = pdfRenderer.renderImage(page)
将替换图像,因此您不能使用它。请尝试使用renderPageToGraphics(int, Graphics2D)
方法:
ComponentColorModel colorModel = new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB), true, false, Transparency.TRANSLUCENT, DataBuffer.TYPE_USHORT);
BufferedImage image = new BufferedImage(colorModel, colorModel.createCompatibleWritableRaster(100, 100), colorModel.isAlphaPremultiplied(), null);
Graphics2D g = image.createGraphics();
try {
pdfRenderer.renderPageToGraphics(page, g);
}
finally {
g.dispose();
}
if (!ImageIOUtil.writeImage(image, test.png, 72))) {
System.err.println("Could not write PNG: " + image);
}
https://stackoverflow.com/questions/65002179
复制相似问题