从资源加载图像无法读取输入文件

时间:2014-05-21 16:04:39

标签: java image

我正在尝试加载资源图片,但是我收到的错误是: javax.imageio.IIOException: Can't read input file!

if(full.equals("")){
    try{
        full = HomePage.class.getResource("/images/default.jpg").getPath();
        System.out.println(full);
        File imgPath = new File(full);
        BufferedImage bufferedImage = ImageIO.read(imgPath);
        WritableRaster raster = bufferedImage.getRaster();
        DataBufferByte data = (DataBufferByte)raster.getDataBuffer();
        full = "data:image/jpeg;base64," + DatatypeConverter.printBase64Binary(data.getData());
    }catch(IOException ex){
        Logger.getLogger(HomePage.class.getName()).log(Level.SEVERE, null, ex);
    }
}

当我打印变量full时,我得到以下位置:
file:/C:/Users/rnaddy/Documents/NetBeansProjects/Phantom%20Browser/dist/run1534966744/Phantom_Browser.jar!/images/default.jpg

那么,我做错了什么?

1 个答案:

答案 0 :(得分:1)

ImageIO知道如何从jar文件中读取,所以你可以说

BufferedImage bufferedImage = ImageIO.read(HomePage.class.getResource("/images/default.jpg"));

至于为什么您的解决方案无效,getResource会返回一个网址。如果您在通过jar运行应用程序时将其打印出来,那么您将看到它为资源返回jar:file:/path/to/file,而如果您运行getPath并打印出来,那么您就可以了。请参阅file:/path/to/file

据推测,ImageIO会根据您传入的网址类型对输入进行不同的处理。