在java

时间:2015-06-02 12:39:53

标签: java adobe bufferedimage cmyk

我正在尝试应用此帖子中发布的代码: How to convert from CMYK to RGB in Java correctly? 到目前为止,来自名为Codo的人的答案对我有用,但我的源不是文件,它的对象被转换为带有

的BufferedImage
stream = (PRStream)object;
PdfImageObject image = new PdfImageObject(stream);
//this does not work
BufferedImage bi = image.getBufferedImage();

这家伙有一个方法可以从像这样的文件中返回一个BufferedImage

public BufferedImage readImage(File file) throws IOException, ImageReadException

但我想用

BufferedImage bi = readImage(image.getBufferedImage());

而不是

File f = new File("/Users/adlib/Documents/projekte/pdf_compress/envirement/eclipse_luna/WORKSPACE/PDFCompression/src/Bild.jpg");
BufferedImage bi = readImage(f);

导致使用iText从pdf文件中提取所有图像。 我搞砸了代码(将文件更改为BufferedImage并添加了流),但是没有让它工作。文件作为输入图像工作正常,但不是我真正需要的。我需要改变什么才能让这些人使用BufferedImage作为readImage()方法的输入?

这是这个家伙的完整代码 https://stackoverflow.com/a/12132630/4944643

他使用Sanselan / Apache Commons Imaging

1 个答案:

答案 0 :(得分:0)

我不确定iText如何提取图像,但使用ImageIO的可能性很大。如果是这样,您可以安装(或依赖于,使用Maven)TwelveMonkeys JPEG ImageIO plugin

BufferedImage bi = image.getBufferedImage();

......应该正常工作。

上述插件支持CMYK(和Adobe YCCK)JPEG。

如果iText不使用ImageIO,则上述操作无效(即,当您已经有BufferedImage时,进行正确的转换为时已晚)。您将需要获取基础PDF的字节(使用getImageAsBytes()方法),并使用ImageIO(通过TwelveMonkeys JPEG插件)对其进行解码:

byte[] imgBytes = image.getImageAsBytes();
BufferedImage bi = ImageIO.read(new ByteArrayInputStream(imgBytes));