2017-05-09 86 views
0

我想从java运行scanimage命令。命令成功执行但我无法读取从命令返回的图像。我想从终端读取图像,并通过Java将其转换为base64字符串。我的代码:执行从Java的scanimage命令

public String getimagefromscanner(String device) 
{ 
    try { 
     Process p = Runtime.getRuntime().exec("scanimage --resolution=300 -l 0 -t 0 -y 297 -x 210 --device-name " + device); 
     BufferedInputStream input = new BufferedInputStream(p.getInputStream()); 
     byte[] file = new byte[input.available()]; 
     input.read(file); 
     String result = new String(Base64.getDecoder().decode(file)); 
     p.waitFor(); 
     p.destroy(); 
     return result; 
    } catch (IOException e) { 
     return e.getLocalizedMessage(); 
    } catch (InterruptedException e) { 
     return e.getLocalizedMessage(); 
    } 
} 
+0

的可能的复制(http://stackoverflow.com/questions/8149828/read-the-output-from-java-exec) –

+0

是的,我可以读线作为字符串,但我不知道如何转换为base64。我不知道哪个数据类型返回。它返回'304DNpï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï ¿½ï¿...' – Burak

+0

它不起作用。 – Burak

回答

0

Finnaly我解决了我的问题。也许别人需要回答。这里[阅读从Java EXEC输出]我的解决方案

public String getimage(String device) 
{ 
    try{ 
     Process p = Runtime.getRuntime().exec("scanimage --resolution=300 -l 0 -t 0 -y 297 -x 210 --format png --device-name " + device); 
     InputStream in = p.getInputStream(); 
     ByteArrayOutputStream out = new ByteArrayOutputStream(); 
     byte[] buffer = new byte[8*1024]; 
     int bytesRead, totalbytes = 0; 
     while ((bytesRead = in.read(buffer)) != -1) { 
      out.write(buffer, 0, bytesRead); 
     } 
     String result = Base64.getEncoder().encodeToString(out.toByteArray()); 
     out.close(); 
     p.waitFor(); 
     p.destroy(); 
     in.close(); 
     return result; 
    } catch (IOException e) { 
     return e.getLocalizedMessage(); 
    } catch (InterruptedException e) { 
     return e.getLocalizedMessage(); 
    } 
}