gpt4 book ai didi

java - 从图像中提取图像

转载 作者:行者123 更新时间:2023-12-01 13:36:09 24 4
gpt4 key购买 nike

是否可以从 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com