java - 将输入流转换为文件

标签 java web-services jersey inputstream tesseract

我有一个使用 Jersey 构建的 REST Web 服务通过 Tess4J 使用 Tesseract 进行 OCR(光学字符识别) Java 绑定(bind)。现在,Tess4J 库希望您向它发送一个图像文件(png、jpg、tif 等),但通过 Jersey 处理,我得到一个包含图像的 InputStream。

如何将此 InputStream 转换为 Tesseract 可以识别的文件类型?我尝试过以下方法:

import org.apache.commons.io.IOUtils;

.....

private static File stream2file (InputStream in) throws IOException {            

    final File tempFile = File.createTempFile("stream2file", ".tmp");
    tempFile.deleteOnExit();

    try (FileOutputStream out = new FileOutputStream(tempFile)) {
        IOUtils.copy(in, out);
    }

    return tempFile;            
}

但随后 Tesseract 库抛出异常,表示它不接受我发送的文件类型(在本例中为“tmp”)。我尝试将那个小“tmp”更改为“tif”和其他受支持的文件类型,但这只是产生了相同的结果,所以我显然在这里遗漏了一些东西。

那么我怎样才能获取一个InputStream,对其进行转换,并将其转发到Tesseract作为它期望的支持的文件类型之一?

最佳答案

临时文件的文件扩展名必须与原始输入图像文件的文件扩展名匹配。

除了文件类型之外,Tess4J还接受 BufferedImage 作为输入。只需将 inputstream 转换为它即可,如下:

BufferedImage image = ImageIO.read(is);

关于java - 将输入流转换为文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22704876/

相关文章:

java - Jersey POJOMappingFeature 将 null 转换为空字符串?

java - 如何使用 Jersey 和 Dropwizard 重定向用户并将消息传递到目标页面?

java - java 获取某个字符串元素的最后一个索引?

java - 在java中打开pdf文件时出现警告

java - 如何为每个 Windows Azure 虚拟机操作系统设置一些唯一标识符

java - 向客户端广播消息

java - swing:让窗口永远不会失去焦点

java - 如何通过java web服务中的ifsc代码获取银行分行名称

web-services - DAO 微服务是微服务架构中的好方法吗?

java - REST,Tomcat,Jersey,IntelliJ,产生 404