从图像中提取图像

时间:2014-01-21 10:45:10

标签: java jpeg ocr libraries

是否可以从jpeg,png或tiff文件中提取图像?不是PDF!假设我有一个包含jpeg格式的文本和图像的文件(所以它基本上是一张图片);我希望能够以编程方式提取图像(最好使用Java)。如果有人知道有用的图书馆,请告诉我。我已经尝试过AspriseOCR和tesseract-ocr,他们已经成功地提取了文本(显然)。 谢谢。

2 个答案:

答案 0 :(得分:1)

尝试:

int startProintX  = xxx;
int startProintY  = xxx;
int endProintX  = xxx;
int endProintY  = xxx;
BufferedImage image = ImageIO.read(new File("D:/temp/test.jpg"));   
BufferedImage out = image.getSubimage(startProintX, startProintY, endProintX, endProintY);
ImageIO.write(out, "jpg", new File("D:/temp/result.jpg"));

这些点是您要提取的图像区域。

从pdf文件中提取图片

我建议您更改帖子图块。您可以使用pdfboxiText api。以下示例从pdf文件中提取所有图像。 可能有一些资源供您使用。如果pdf中有大量图像,则可能会出现java.lang.OutOfMemoryError

下载pdfbox.xx.jar here

import java.io.File;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.pdfbox.PDFBox;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDResources;
import org.apache.pdfbox.pdmodel.graphics.xobject.PDXObjectImage;
import org.jdom.Document;

public class ExtractImagesFromPDF {
    public static void main(String[] args) throws Exception {
        PDDocument document = PDDocument.load(new File("D:/temp/test.pdf"));
         List pages = document.getDocumentCatalog().getAllPages();
         Iterator iter = pages.iterator();
         while(iter.hasNext()) {
             PDPage page = (PDPage)iter.next();
             PDResources resources = page.getResources();
             Map images = resources.getImages();
             if( images != null ) {
                 Iterator imageIter = images.keySet().iterator();
                 while(imageIter.hasNext()) {
                     String key = (String)imageIter.next();
                     System.out.println("Key : " + key);
                     PDXObjectImage image = (PDXObjectImage)images.get(key);
                     File file = new File("D:/temp/" +  key + "." + image.getSuffix());
                     image.write2file(file);
                 }
             }
         }
    }
}   

从pdf文件中提取特定图片

要提取特定图片,您必须知道该页面的index of pageindex of image。否则,你无法提取。

以下示例程序提取first image的{​​{1}}。

first page

答案 1 :(得分:0)

如果您对开箱即用的产品感兴趣,可以通过黑盒处理以最少的非编程配置(因为您尝试过其他产品)来实现这一点,那么ABBYY FlexiCapture可以做到这一点。它可以配置为在松散定义的区域或页面上的任何位置查找图片/对象的动态大小,并完全控制搜索逻辑。我曾经用它来提取特定形状和厚度的线条以分开书的章节,其中每一行都表示一个新的章节,并且可以在页面的任何地方。