【问题标题】:Decoding base64 String to Bitmap in Android在Android中将base64字符串解码为位图
【发布时间】:2015-05-15 21:14:16
【问题描述】:

代码

public Bitmap StringToBitMap(String encodedString){          
   try{              
         byte [] encodeByte=Base64.decode(encodedString,Base64.DEFAULT);               
         Bitmap bitmap=BitmapFactory.decodeByteArray(encodeByte, 0, encodeByte.length);
         return bitmap;
       }catch(Exception e){
           e.getMessage();
           return null;
       } 
}

即使我给了它编码的64(utf-8)字符串,它也总是返回null--->aGVsbG8=

为什么会发生这种情况,任何人都有想法..??我在做什么错任何人都可以建议我...

【问题讨论】:

  • 好吧,如果抛出异常,您将返回 null - 您正在调用 getMessage() 但没有记录它或执行类似的操作。我的猜测是抛出了一个异常,但是由于缺少日志记录,您不知道是什么...
  • 我知道,但我的问题是为什么这个发生我已经传递了 64base 字符串,所以它没有将它转换为位图,
  • 提示:如果您查看异常,您会发现它发生的原因。这就是例外比“失败”更丰富的意义所在。 (如果这真的是你完整的 base64 信息,我怀疑问题在于它不是一个完整的图像文件。)
  • 位图就是图像
  • aGVsbG8= 只是“hello”的 ASCII 编码的 base64 编码形式。你到底期望返回什么?如果您希望它是一个带有该文本的位图,那么您使用的是完全错误的方法。

标签: java android string bitmap


【解决方案1】:

我认为问题在于您正在尝试将 base64 字符串解码为位图,但实际上您只想将其解码为字符串。这是执行此操作的代码:

String decodeBase64String(String encodedString)
{
    byte[] data = Base64.decode(encodedString, Base64.DEFAULT);
    return new String(data, "UTF-8");
}

(假设 UTF-8 编码)

如果你用这样的测试字符串调用这个函数:

String result = decodeBase64String("aGVsbG8=");

然后结果将是“你好”。

以下是将文本转换为位图的方法:

Bitmap textToBitmap(String text)
{
     Paint paint = new Paint();
     paint.setColor(Color.WHITE);
     paint.setStrokeWidth(12);
     Rect bounds = new Rect();
     paint.getTextBounds(text, 0, text.length(), bounds);
     Bitmap bitmap = Bitmap.createBitmap(bounds.width(), bounds.height(), Bitmap.Config.ARGB_8888);
     Canvas canvas = new Canvas(bitmap);
     canvas.drawText(text, 0, 0, paint);
     return bitmap;
}

因此,您可以将 base64 编码的文本转换为如下所示的位图:

String result = decodeBase64String("aGVsbG8=");
Bitmap bitmap = textToBitmap(result);

或者你可以这样做:

Bitmap bitmap = textToBitmap("hello");

【讨论】:

  • 是的,我尝试将其转换为位图
  • 是否要将文本绘制到位图上?
  • 不,我只想要我写的字符串的位图,所以我搜索它,最后我得到了这个函数,但它似乎不起作用,简而言之,我想要传递一个字符串的函数和它返回我该字符串的位图
  • 试试我回答中的代码。它会给你你原来的字符串“你好”。为什么需要位图?位图用于图像而不是文本。
  • 查看我的更新答案。我认为您对 base64 的用途感到困惑。它不是用于在位图上绘制文本。它用于将数据(例如图像)编码为文本字符串,然后将文本转换回数据。但无论如何都要试试代码。
【解决方案2】:

您可以使用其他一些内置方法恢复您的代码。

  String base="****Base64 string values of some image******”;
  byte[] imageAsBytes = Base64.decode(base.getBytes(), Base64.DEFAULT);
  ImageView image = (ImageView)this.findViewById(R.id.imageView1);
  image.setImageBitmap(
  BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length)

【讨论】:

  • 我在函数中做了同样的事情
猜你喜欢
  • 1970-01-01
  • 2012-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-27
  • 2012-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多