java - 从图像中提取图像

标签 java jpeg ocr libraries

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

最佳答案

尝试:

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 文件中提取特定图像

要提取特定图像,您必须知道该页面的页面索引图像索引。否则无法提取。

以下示例程序提取第一页第一张图像

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

关于java - 从图像中提取图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21255826/

相关文章:

java - batik 将 SVG 转换为 JPEG

png - PNG是否支持诸如作者,相机型号等元数据字段?

ocr - 哪种OCR引擎更好:Tesseract或OCRopus?

java - 从图像中解析字符以进行 OCR 的算法

java - 启动 Derby 连接时为 "SecurityException: sealing violation"

java - 遇到 java.lang.NoClassDefFoundError 问题(错误名称 :) when running from cmd

java - JPEG如何在解码文件流时跳过用户定义的标签

在 Java 中使用 TESSERACT API 时出现 java.lang.UnsatisfiedLinkError 异常

java - 如何解决 "injection of autowired dependencies failed"问题?

java - Autowiring 在 Junit 测试和 spring @configuration 中失败