gpt4 book ai didi

android - 如何从 firebase 存储下载特定大小的图像

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:13:22 25 4
gpt4 key购买 nike

我在我的 Android 应用程序中使用 firebase 存储来存储用户上传的图像。 所有上传的图片都是方形的。我发现下载这些图像会占用大量用户带宽,我想通过减小下载到 square imageview

中的图像大小来减少这种消耗

我正在使用 Glide 下载此图片,我已尝试下载自定义大小的图片,但图片未显示在图片 View 中。

界面

public interface MyDataModel {
public String buildUrl(int width, int height);
}

我的扩展 BaseGlideUrlLoader 的类

public class MyUrlLoader extends BaseGlideUrlLoader<MyDataModel> {
public MyUrlLoader(Context context) {
super(context);
}

@Override
protected String getUrl(MyDataModel model, int width, int height) {
// Construct the url for the correct size here.
return model.buildUrl(width, height);
}
}

实现 MyDataModel 接口(interface)的类

public class CustomImageSize implements MyDataModel {

private String uri;

public CustomImageSize(String uri){
this.uri = uri;
}

@Override
public String buildUrl(int width, int height) {

return uri + "?w=" + width + "&h=" + height;
}
}

最后

CustomImageSize size = new CustomImageSize(uri);

Glide.with(context)
.using(new MyUrlLoader(context))
.load(size)
.centerCrop()
.priority(Priority.HIGH)
.into(imageView);

上述解决方案的结果

图像没有出现在我的方形 ImageView 中

解决方案 2:使用 firebase 图像加载器

    // Reference to an image file in Firebase Storage
StorageReference storageReference = ...;

ImageView imageView = ...;

// Load the image using Glide
Glide.with(this /* context */)
.using(new FirebaseImageLoader())
.load(storageReference)
.into(imageView);

上述解决方案 2 的结果

工作!图像正在出现,但是 就像整个图像都已下载,这会消耗大量带宽。我只想下载自定义尺寸的图像,例如 200px x 200px。

我如何做或更改上面的解决方案 1 以从 firebase 存储下载自定义大小的图像?

编辑

我尝试从浏览器访问我的一张图片 https://firebasestorage.googleapis.com/....m.png,它已成功加载到网页。但是当我尝试将特定尺寸的参数放入我的图像 url 链接时 https://firebasestorage.googleapis.com/....m.png?w=100&h=100 上出现错误网页

 {
"error": {
"code": 403,
"message": "Permission denied. Could not perform this operation"
}
}

最佳答案

我终于能够使用 MyUrlLoader 类从 firebase 存储下载图像

你看,firebase 存储 url 看起来像这样

firebasestorage.googleapis.com/XXXX.appspot.com/Folder%2Image.png?&alt=media&token=XXX

正如你在上面看到的,链接已经有这个特殊的问号字符 ? 代表查询字符串的开始 所以当我使用 CustomImageSize 类,添加了另一个 ?,因此链接以两个 ? 结束,导致下载失败

firebasestorage.googleapis.com/XXXX.appspot.com/Folder%2Image.png?&alt=media&token=XXX?w=200&h=200

解决方案 是在我的 CustomImageSize 类中删除 ?。于是就变成了这样

    public class CustomImageSize implements MyDataModel {

private String uri;

public CustomImageSize(String uri){
this.uri = uri;
}

@Override
public String buildUrl(int width, int height) {

return uri + "w=" + width + "&h=" + height;
}
}

虽然它已下载,但我不确定是下载了整个图像还是仅下载了自定义尺寸的图像。这是因为,在纠正导致查看失败的错误后,我尝试在浏览器中访问图像,但我仍然收到了完整的图像。不是调整大小的图像 (w=200&h=200)

关于android - 如何从 firebase 存储下载特定大小的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42480626/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com