【问题标题】:How to load image through byte array using Glide?如何使用 Glide 通过字节数组加载图像?
【发布时间】:2016-01-04 10:18:46
【问题描述】:

我有一个图像内容字节 [] 形式。但是当我通过 Glide 加载它们时,会显示损坏的图像。我在做什么如下所示。

Glide.with(context)
    .load(imageByteArray)
    .asBitmap()
    .placeholder(R.drawable.ic_broken)
    .into(rowImageView);

imageByteArray 在不使用滑行的情况下成功转换为位图。所以图片字节数组没有错。

请指导我缺少什么?

我也在使用 Glide 库 com.github.bumptech.glide:glide:3.6.1 以及Android支持库com.android.support:support-v13:23.0.1

已编辑

好的,这就是我正在做的。

String imageBytes = "HVao14fpmtHSev3OgsrQNsawkFzXNcY3BsfQla6..."

上面定义的这个字符串是我从 Web API 接收到的实际图像的字节数。

我正在把这个字符串转换成这样的字节数组

public static byte[] hexStringToByteArray(String s) {
        int len = s.length();
        byte[] data = new byte[len / 2];
        for (int i = 0; i < len; i += 2) {
            data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
                    + Character.digit(s.charAt(i+1), 16));
        }
        return data;
}

我将结果字节数组“imageByteArray”应用于上面定义的 Glide 代码。

【问题讨论】:

  • prolly,因为你不了解多线程的基础知识......但这只是盲目的猜测......因为你没有提供如何获得这个字节数组......这个范围是什么变量是否在某种循环中使用....
  • 我明白。不要给这些类型的 cmets,请用正确的答案指导我。谢谢
  • 那么请提出正确的问题......因为这段代码确实提供了一个未损坏的图像形式我(我使用了您问题中的代码和问题中的库)
  • 问题中写的是imageByteArray不使用glide成功转换为位图。有关详细信息,imageByteArray 来自 Web API。在字节数组中发送图像
  • 呵呵“我明白”......不,你不明白...... =>对多线程的“你的理解”两个例子(有和没有滑翔)应该有相同的结果:@987654321 @ 但正如你所见,他们没有...

标签: java android android-glide


【解决方案1】:

假设你的 base64 字符串是

String imageBytes = "HVao14fpmtHSev3OgsrQNsawkFzXNcY3BsfQla6..."

您应该通过

imageBytes字符串转换为字节数组
byte[] imageByteArray = Base64.decode(imageBytes, Base64.DEFAULT);

然后将此imageByteArray 传递给 Glide。

Glide.with(context)
    .load(imageByteArray)
    .asBitmap()
    .placeholder(R.drawable.ic_broken)
    .into(rowImageView);

【讨论】:

  • @Andan Amjad 我也有同样的问题,我试过这个 sn-p,但显示错误,无法解决 .asBitmap(),你能帮帮我吗?
  • @AmitVerma 您使用的是哪个 Glide 版本?如果它低于 5 则在 .with() 之后使用 .asBitmap()
  • 如果我有图片列表,那么这会变得很慢
  • .asBitmap() 那是什么,我们为什么需要它?
  • 我在没有.asBitmap() 的情况下进行了测试,它工作正常
【解决方案2】:

您可以使用以下方法将Base64 字符串转换为图像

Glide.with(context)
    .load(Base64.decode(base64ImageString, Base64.DEFAULT))
    .asBitmap()
    .placeholder(R.drawable.ic_broken)
    .into(rowImageView);

【讨论】:

  • 你的答案与接受的答案相比有什么不同?!
  • 没什么,他只是少了一个变量-
【解决方案3】:

如果您在.asBitmap() 上遇到错误,请像这样使用它

             Glide.with(this)
                .asBitmap()
                .load(imageAsBytes)
                .into(image)

【讨论】:

    【解决方案4】:

    Kotlin 方式:

    val imageByteArray = Base64.decode(sampleBase64ImageString, Base64.DEFAULT)
    Glide.with(this).load(imageByteArray).into(imageView)
    

    【讨论】:

      【解决方案5】:

      我的做法有点不同

      byte[] bytes = Glide.with(context)
                              .as(byte[].class)
                              .load(url)
                              .submit()
                              .get();
      

      字节已准备好写入文件。

      【讨论】:

        猜你喜欢
        • 2018-06-09
        • 2017-10-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多