高效、快速地从URL中加载图像的方法

2 人关注

我正在开发一个需要从尿液中加载多个图片的应用程序。我把所有的图片都保存在Firebase存储中。目前我正在使用一个压缩器来减少图片的大小。

 newImageFile=new File(uri1.getPath());
                    try {
                        compressedImageFile = new Compressor(ProductAdd.this)
                                .compressToBitmap(newImageFile);
                    } catch (IOException e) {
                        e.printStackTrace();
                     baos = new ByteArrayOutputStream();
                    compressedImageFile.compress(Bitmap.CompressFormat.JPEG, 100, baos);
                     thumbData1 = baos.toByteArray();

我使用Glide从URL中加载图片

Glide.with(context).load(imgUrl).into(holder.cutImg);

我想知道是否有什么方法可以提高加载图片的速度。也许可以用一种特定的格式来存储它们。

android
image
firebase
firebase-storage
android-glide
duded
duded
发布于 2019-08-03
4 个回答
Kashish Sharma
Kashish Sharma
发布于 2021-09-22
已采纳
0 人赞同

你可以在加载原始图像之前将原始图像的缩略图加载到ImageView中。

Glide.with(fragment)
  .load(url)
  .thumbnail(0.05f)
  .into(imageView);

这将把原始图像的5%的质量加载到视图中,当完整的图像加载时,它将被替换。

如果你为缩略图设置了一个单独的URL,那么

Glide.with(fragment)
  .load(url)
  .thumbnail(
    Glide.with(fragment)
      .load(thumbnailUrl))
  .into(imageView);

现在,当图像加载时,它将立即被加载到视图中,这里你可以使用过渡来获得平滑的效果。

Glide.with(fragment)
    .load(url)
    .thumbnail(0.05f)
    .transition(DrawableTransitionOptions.withCrossFade())
    .into(view);

你可以查看我的project其中,我也是先压缩图片,并将一个缩略图存储到Firebase存储空间,然后再加载。

你也可以尝试不同的DiskCacheStrategies,但我建议使用默认的,它工作得很好。

这里有各种DiskCacheStrategies。

.diskCacheStrategy(DiskCacheStrategy.ALL)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.diskCacheStrategy(DiskCacheStrategy.DATA)
.diskCacheStrategy(DiskCacheStrategy.AUTOMATIC)
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
    
谢谢你帮了大忙
niks
niks
发布于 2021-09-22
0 人赞同

你可以使用光盘策略,它将被用来存储光盘上的图像。因此,一开始加载可能需要时间,但后来根本不需要时间。

For Glide 4.x

Glide  
    .with(context)
      .load(imgUrl)
      .diskCacheStrategy(DiskCacheStrategy.DATA)
      .into(holder.cutImg);

For Glide 3.x

Glide
   .with(context)
   .load(imgUrl)
   .diskCacheStrategy(DiskCacheStrategy.SOURCE)
   .into(holder.cutImg);