2014-01-21 155 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能做到這一點。它可以配置爲在鬆散定義的區域或頁面上的任何位置查找動態大小的圖片/對象,並完全控制搜索邏輯。我曾經使用它來提取特定形狀和粗細的線條來分隔書籍的各個章節,其中每一行都表示一個新章節,並且可能位於頁面上的任何位置。