[英]Lossless image extraction from PDF
我正在使用PDFBox从PDF文件中提取图像,并将其提供给另一个图像处理库(可以处理不同的图像格式)。 我当前的代码是这样的:
PDImageXObject pdImage;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
BufferedImage image = pdImage.getImage();
ImageIO.write(image, "png", baos);
byte[] imageBytes = baos.toByteArray();
这将获取存储在PDF文件中的所有内容,并使用Java图形将其转换为PNG。 有没有更好的方法来避免转换并以嵌入的任何格式提取图像? 我不想降低图像质量(我想通过使用像PNG这样的无损格式来减轻图像质量)并招致转换开销。
FlateDecode过滤器和PNG文件格式使用DEFLATE算法。 但是,经过FlateDecode压缩的数据流本身并不是PNG文件。
另外,您还需要考虑Image XObject(例如DeviceCMYK)的色彩空间表示形式与PNG实际支持的色彩形式。
通过对输出图像文件进行无损压缩,您将不会丢失任何信息。 (请确保您确实需要无损提取的图像,通常人们会认为有损压缩意味着他们的图像现在将发生很多变化,无法再识别。尽管在很多情况下,根据参数的不同,损失几乎无法用肉眼察觉,您可以大大受益于有损压缩的尺寸节省。)
如果性能较慢,则可能只是负责提取图像并保存图像的PDF软件的质量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.