首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将InputStream转换为文件

将InputStream转换为文件
EN

Stack Overflow用户
提问于 2014-03-27 21:28:09
回答 2查看 20.1K关注 0票数 0

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

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

代码语言:javascript
运行
AI代码解释
复制
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?

EN

回答 2

Stack Overflow用户

发布于 2014-03-28 04:14:20

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

除了File类型之外,Tess4J还接受BufferedImage作为输入。只需将输入流转换为它,如下所示:

代码语言:javascript
运行
AI代码解释
复制
BufferedImage image = ImageIO.read(is);
票数 2
EN

Stack Overflow用户

发布于 2014-11-23 23:48:33

试试(FileOutputStream out = new FileOutputStream(tempFile))。你在这一行有个错误。您应该使用FileOutputStream (String)而不是FileOutputStream(File)。所以应该是FileOutputStream(tempfile.getName())

传递给FileOutputStream构造函数的参数是一个字符串,它是指向实际文件的路径或文件名。它不是File对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22704876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档