是否可以从jpeg,png或tiff文件中提取图像?不是PDF!假设我有一个包含jpeg格式的文本和图像的文件(所以它基本上是一张图片);我希望能够以编程方式提取图像(最好使用Java)。如果有人知道有用的图书馆,请告诉我。我已经尝试过AspriseOCR和tesseract-ocr,他们已经成功地提取了文本(显然)。 谢谢。
答案 0 :(得分:1)
尝试:
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文件中提取特定图片
要提取特定图片,您必须知道该页面的index of page
和index of image
。否则,你无法提取。
以下示例程序提取first image
的{{1}}。
first page
答案 1 :(得分:0)
如果您对开箱即用的产品感兴趣,可以通过黑盒处理以最少的非编程配置(因为您尝试过其他产品)来实现这一点,那么ABBYY FlexiCapture可以做到这一点。它可以配置为在松散定义的区域或页面上的任何位置查找图片/对象的动态大小,并完全控制搜索逻辑。我曾经用它来提取特定形状和厚度的线条以分开书的章节,其中每一行都表示一个新的章节,并且可以在页面的任何地方。