【问题标题】:Picasso - how to get the real image size?毕加索 - 如何获得真实的图像尺寸?
【发布时间】:2016-05-21 14:43:30
【问题描述】:

我使用 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 等)

【问题讨论】:

标签: android image bitmap picasso android-bitmap


【解决方案1】:

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

【讨论】:

  • 感谢您的回答,但这并不能解决我的问题。这是内存图像大小,而不是文件的实际大小。所有 1920x1080 像素的图像返回 8294400 字节(因为 (1920 像素 * 1080 像素) * 4 字节/像素 = 8,294,400 字节)。
【解决方案2】:

我知道这个问题很老了,但我来到这里寻求答案,但没有找到答案。

我使用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。
  • 这可能不适用于大文件。
  • 请注意,转换为整数可能会绕过整数的最大值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 2014-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多