为什么使用ImageIO无法从URL获取BufferedImage [英] Why use ImageIO can't get BufferedImage from URL

查看:119
本文介绍了为什么使用ImageIO无法从URL获取BufferedImage的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

imageURL: https://fbexternal-a.akamaihd.net/safe_image.php?d= AQBB77GLfY75FNWL&安培; W = 720&安培; H = 2048&安培; URL = HTTP%3A%2F%2Fwww.facebook.com%2Fads%2Fimage%2F%3FD%3DAQI0duFYFcmydWNutbwmSk2DfOmHcDrhPfsMJTUoEObbWkVzYUtrHgCuN_LFrWcPRzJi6jPgbn80oFs0Kj_WrdROjdnJkjbnS5-UJv9l9cJyhKCWS-LR-MXlc263Ul3Txe-VFqXfRrA6BOjt4DF-Sww2&安培; EXT =最好

imageURL: https://fbexternal-a.akamaihd.net/safe_image.php?d=AQBB77GLfY75FNWL&w=720&h=2048&url=http%3A%2F%2Fwww.facebook.com%2Fads%2Fimage%2F%3Fd%3DAQI0duFYFcmydWNutbwmSk2DfOmHcDrhPfsMJTUoEObbWkVzYUtrHgCuN_LFrWcPRzJi6jPgbn80oFs0Kj_WrdROjdnJkjbnS5-UJv9l9cJyhKCWS-lr-MXlc263Ul3Txe-VFqXfRrA6BOjt4DF-Sww2&ext=best

URL url = new URL(imageURL);
BufferedImage image = ImageIO.read(url);

URL url = new URL(imageURL);
BufferedImage image = ImageIO.read(url.openStream());

结果图片为空?为什么?

推荐答案

ImageIO.read(URL)确实支持从您描述的URL中读取图像,但是,它仅支持一组有限的图像格式.内置格式为JPEG,PNG,GIF,BMP和WBMP.有许多其他格式的插件,例如TIFF,JPEG 2000等.

ImageIO.read(URL) does support reading images from URL like you describe, however, it does support only a limited set of image formats. Built-in formats are JPEG, PNG, GIF, BMP and WBMP. There are plugins for many other formats, like TIFF, JPEG 2000, etc.

问题是链接的图像不是任何内置格式,而是 WEBP格式,这是Google创建的一种新的图像格式,目前尚未得到广泛使用.它在浏览器中(以及我的:-)上显示良好的原因,很可能是您使用的是Chrome,并且Chrome内置了对WEBP的支持.

The problem is that the linked image is not in any of the built-in formats, it's in WEBP format, a new image format created by Google, and which does not have very widespread use yet. The reason it displays fine in your browser (and mine :-) ), is most likely that you are using Chrome, and Chrome has built-in support for WEBP.

至少有一个 WEBP ImageIO插件.如果您构建并安装此插件,则上面的代码应该可以正常工作,并且可以正常读取图像.启动应用程序时,如果插件位于类路径上,则无需调用ImageIO.scanForPlugins().

There's at least one WEBP ImageIO plugin available. If you build and install this plugin, your code above should work and read the image just fine. There should be no need to invoke ImageIO.scanForPlugins() if the plugin is on class path when you launch your application.

这篇关于为什么使用ImageIO无法从URL获取BufferedImage的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆