Mik*_* B. 4 java bufferedimage java-8 javax.imageio
为了获得图像的高度,我们可以使用ImageIO.read(new URL("…")).getHeight().
我的问题:
首先,你的问题:
的种类.首先,这些ImageIO.read(...)方法是使用所有默认参数进行解码的解码文件中第一个图像的便捷方法.由于所有ImageIO.read(...)操作都被委托给格式化特定插件或ImageReader实例(例如JPEGImageReader),因此这可能是特定于插件的.但一般情况是,图像数据是"在运行中"传输和解码的.请注意,这里没有"大小计算",而是在这种情况下将整个图像解码为a BufferedImage.除了解码的像素值之外,必须传送解码文件中的第一图像所需的数据,但不必存储在计算机上的任何地方.
这取决于.有一个设置ImageIO.setUseCache(boolean),控制数据是缓存在磁盘上还是缓存在RAM中.
true,则数据临时存储在磁盘上,通常位于默认临时目录中(请参阅java.io.tempdir系统属性).false在解码图像时将数据临时存储在存储器中.不,除非您的服务器有一个特殊的API来为您提供此数据,并且您针对此API执行特定请求.但是,ImageIOAPI确实有更多粒度方法,可以让您更快地获得图像尺寸,而无需预先下载/解码整个图像.
获得图像尺寸的更快方法是:
try (InputStream stream = url.openStream()) {
// The "useCache" setting will decide whether "input" below
// will be disk or memory cached
try (ImageInputStream input = ImageIO.createImageInputStream(stream)) {
ImageReader reader = ImageIO.getImageReaders(input).next(); // TODO: Handle no reader
try {
reader.setInput(input);
// Get dimensions of first image in the stream, without decoding pixel values
int width = reader.getWidth(0);
int height = reader.getHeight(0);
}
finally {
reader.dispose();
}
}
}
Run Code Online (Sandbox Code Playgroud)
同样,根据图像格式,上述代码应该只读取确定图像尺寸所需的标题/元数据.大多数ImageReader实现都会为此读取所有标头数据,但是,它仍然比解码整个图像要快得多,并且涉及的数据(和内存)要少得多.
由于不同的格式具有不同大小的标题,底层传输(即HTTP)可能以"块"等方式传输数据,因此很难对下载多少数据或需要下载多少数据做出任何假设.
| 归档时间: |
|
| 查看次数: |
1779 次 |
| 最近记录: |