URL url = new URL(imageURL);
BufferedImage image = ImageIO.read(url);
或
URL url = new URL(imageURL);
BufferedImage image = ImageIO.read(url.openStream());
结果图片为空?为什么呢?
答案 0 :(得分:4)
ImageIO.read(URL)
确实支持从您描述的URL中读取图像,但是,它仅支持一组有限的图像格式。内置格式为JPEG,PNG,GIF,BMP和WBMP。有许多其他格式的插件,如TIFF,JPEG 2000等。
问题在于链接的图片不是任何内置格式,而是WEBP format,这是Google创建的一种新图片格式,目前还没有广泛使用。它在您的浏览器(以及我的:-))中显示正常的原因很可能是您使用Chrome,而Chrome内置了对WEBP的支持。
至少有一个WEBP ImageIO plugin可用。如果您构建并安装此插件,上面的代码应该可以正常工作并读取图像。如果插件在启动应用程序时位于类路径上,则无需调用ImageIO.scanForPlugins()
。
答案 1 :(得分:1)
确保您提供的网址链接到有效的图片文件格式,例如jpg
,png
,bmp
等。
您当前的网址链接到.php
文件,该文件显然不是图片。
例如:
public static void main(String[] args)
{
Image image = null;
try {
URL url = new URL("https://s-media-cache-ak0.pinimg.com/236x/ac/bb/d4/acbbd49b22b8c556979418f6618a35fd.jpg");
image = ImageIO.read(url);
} catch (IOException e) {
e.printStackTrace();
}
JFrame frame = new JFrame();
frame.setSize(236, 306);
frame.add(new JLabel(new ImageIcon(image)));
frame.setVisible(true);
}
答案 2 :(得分:0)
当我在Firefox中打开链接时,它会尝试下载名为“safe_image.php”的文件。它适用于谷歌浏览器,因此标题或该URL的内容有些奇怪。你有什么方法可以将图像托管在其他地方吗?
修改:您的图片显示为WebP格式。 ImageIO本身不支持此格式,因此您需要一个类似webp-imageio的库。
安装该库并查看您的代码是否有效。运行ImageIO
时,ImageIO.scanForPlugins()
会自动找到该插件。