毕加索 - 如何获取真实的图片尺寸?

4

我使用Picasso库从URL加载图像。我想获取真实的图像大小,但我只能获取内存中的图像大小:

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等)。

请遵循这个答案,我认为它可以解决你的问题:https://dev59.com/Pl8e5IYBdhLWcg3wpLsr#25524136 - Pro Mode
检查我的编辑以了解如何获取实际大小,而不是尺寸。 - AkashBhave
2个回答

3

你可以先获取正在加载的实际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替换为您想要使用的任何URL。希望能对您有所帮助!


8
谢谢回答,但它没有解决我的问题。这是内存图像大小,而不是文件的实际大小。所有1920x1080像素的图像都返回8294400字节(因为(1920像素* 1080像素)*每个像素4个字节= 8,294,400字节)。 - Mikhail

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();
    }
}

备注:

  • 上述代码执行网络调用,应在后台线程上执行。
  • 大小以字节返回,如果要转换为KB,可以除以1000。
  • 这可能无法处理大文件。
  • 注意,强制转换为整数可能会绕过整数的最大值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接