我从URL使用Picasso库加载图像。我想获得真实的图像大小,但我只能在内存中获得图像大小:
Picasso.with(this)
.load(imageUrl)
.error(R.drawable.no_image)
.into(photoView, new Callback() {
@Override
public void onSuccess() {
Bitmap bitmap = ((BitmapDrawable)photoView.getDrawable()).getBitmap();
textImageDetail.setText(bitmap.getByteCount());// image size on memory, not actual size of the file
}
@Override
public void onError() { }
});
如何获取加载图像的大小?我认为它存储在缓存中的某个地方,但我不知道如何访问图像文件。
更新
抱歉我的英语不好,也许我问了错误的问题。我需要获得图像大小(128 kb,2 MB等)。 不图像分辨率(800x600等)
答案 0 :(得分:2)
您可以先获取正在加载的实际Bitmap
图像,然后找到该图像的尺寸。这必须在AsyncTask
之类的异步方法中运行,因为下载图像是同步的。这是一个例子:
Bitmap downloadedImage = Picasso.with(this).load(imageUrl).get();
int width = downloadedImage.getWidth();
int height = downloadedImage.getHeight();
如果您想获得Bitmap
的实际图像大小(以字节为单位),请使用
// In bytes
int bitmapSize = downloadedImage.getByteCount();
// In kilobytes
double kbBitmapSize = downloadedImage.getByteCount() / 1000;
将imageUrl
替换为您要使用的任何网址。希望它有所帮助!
答案 1 :(得分:0)
我知道这个问题很老,但我来这里寻找答案却没有找到。
我找到了一个使用 OkHttpClient
的解决方案。
您可以只获取标题信息,使用 OkHttpClient
并获取内容长度无需下载图像。
OkHttpClient httpClient = new OkHttpClient();
Request request = new Request.Builder().url(imageURL).head().build();
Response response = null;
try {
response = httpClient.newCall(request).execute();
String contentLength = response.header("content-length");
int size = Integer.parseInt(contentLength);
} catch (IOException e ) {
if (response!=null) {
response.close();
}
}
注意事项: