You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从Firebase Storage获取的图片加载到ImageView不显示,如何压缩图片大小?

解决方案

  • 优先使用Glide内置的压缩能力,这是改造成本最低的方案
    Glide本身默认就会根据目标ImageView的尺寸对图片进行下采样压缩,避免加载全尺寸大图占用过多内存。你可以直接修改Glide加载逻辑,手动指定目标尺寸,强制压缩到你需要的大小,同时开启缓存减少重复加载消耗:
    Glide.with(getApplicationContext())
        .load(sart)
        .override(300, 300) // 强制将图片压缩到300*300像素,可按需求调整
        .centerCrop() // 可选,根据你的展示需求调整裁剪模式
        .diskCacheStrategy(DiskCacheStrategy.ALL) // 缓存压缩后的图片,下次加载无需重新下载处理
        .into(str_art);
    
    你之前注释的本地Bitmap处理代码失效的原因是StorageReference是云端资源的引用对象,不是本地文件路径,直接转成字符串传给BitmapFactory.decodeFile根本读不到图片数据,自然无法完成压缩。
  • 服务端预压缩方案(适合大量大体积图片场景)
    你可以启用Firebase官方的存储图片调整扩展,安装后服务端会自动对所有存量和新增的图片生成多档尺寸的压缩版本,你拉取时直接指定要加载的尺寸即可,无需客户端下载原图再处理,大幅节省带宽和客户端性能消耗,1000张量级的图片资源无需重新上传,扩展会自动完成存量资源的处理。
  • 自行实现客户端下载后压缩
    如果你确实需要自己控制压缩逻辑,可以先将StorageReference对应的文件下载到本地缓存目录,再对本地文件进行尺寸压缩,示例逻辑如下:
    File localCacheFile = new File(getCacheDir(), art_filename + ".jpg");
    sart.getFile(localCacheFile).addOnSuccessListener(taskSnapshot -> {
        // 下载完成后对本地文件进行压缩处理
        Bitmap compressedBmp = ShrinkBitmap(localCacheFile.getAbsolutePath(), 300, 300);
        str_art.setImageBitmap(compressedBmp);
    }).addOnFailureListener(exception -> {
        // 处理下载失败逻辑
    });
    

内容的提问来源于stack exchange,提问作者Kayla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 21:36:05