2014-01-21 157 views
0

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

+0

你有一些代码吗?或者你在寻找想法? – guisantogui

+0

我使用Xuggler进行图像和视频处理。 – Fabinout

+0

我正在寻找想法。我可以使用的图书馆。谢谢。 – iAmIronMan

回答

0

尝试:

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.jarhere。从PDF文件

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); 
       } 
      } 
     } 
    } 
} 

提取特定的图像要提取特定的图像,你要知道index of page和页面index of image。否则,你不能提取。

以下示例程序提取first imagefirst page

int targetPage = 0; 
PDPage firstPage = (PDPage)document.getDocumentCatalog().getAllPages().get(targetPage); 
PDResources resources = firstPage.getResources(); 
Map images = resources.getImages(); 
int targetImage = 0; 
String imageKey = "Im" + targetImage; 
PDXObjectImage image = (PDXObjectImage)images.get(imageKey); 
File file = new File("D:/temp/" + imageKey + "." + image.getSuffix()); 
image.write2file(file); 
+0

谢谢,那种帮助。如果图像的坐标未知,我该怎么办? @CycDemo – iAmIronMan

+0

@iAmIronMan :),我不确定,你必须知道'坐标点'区域来提取。如果是这样,请尝试再试一次以达到您的目标。 – CycDemo

+0

@iAmIronMan检查更新文章'从PDF文件中提取图像' – CycDemo

0

如果你有兴趣出的现成的产品,可以用最少的非编程组态通过暗箱处理做到这一点(因为你尝试过其他产品),然后ABBYY FlexiCapture能做到这一点。它可以配置为在松散定义的区域或页面上的任何位置查找动态大小的图片/对象,并完全控制搜索逻辑。我曾经使用它来提取特定形状和粗细的线条来分隔书籍的各个章节,其中每一行都表示一个新章节,并且可能位于页面上的任何位置。