是否可以从 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 文件中提取图像
我建议更改您的帖子标题。您可以使用pdfbox
或iText
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/