如何将图像转换为Base64字符串?

Nul*_*ion 141 base64 android

有人能告诉我将图像(最大200KB)转换为Base64字符串的代码吗?

我需要知道如何使用android,因为我必须添加上传图像的功能到我的主应用程序中的远程服务器,将它们作为字符串放入数据库的一行.

我在谷歌和StackOverflow中搜索,但我找不到我能负担得起的简单示例,而且我找到了一些例子,但他们并没有谈到转换成字符串.然后我需要转换为字符串以通过JSON上传到我的远程服务器.

xil*_*il3 320

您可以使用Base64 Android类:

String encodedImage = Base64.encodeToString(byteArrayImage, Base64.DEFAULT);
Run Code Online (Sandbox Code Playgroud)

您必须将图像转换为字节数组.这是一个例子:

Bitmap bm = BitmapFactory.decodeFile("/path/to/image.jpg");
ByteArrayOutputStream baos = new ByteArrayOutputStream();  
bm.compress(Bitmap.CompressFormat.JPEG, 100, baos); //bm is the bitmap object   
byte[] b = baos.toByteArray(); 
Run Code Online (Sandbox Code Playgroud)

*更新*

如果您使用较旧的SDK库(因为您希望它可以在具有较旧版本操作系统的手机上运行),您将不会打包Base64类(因为它刚刚出现在API级别8又称2.2版本).

查看本文以获得解决方法:

http://androidcodemonkey.blogspot.com/2010/03/how-to-base64-encode-decode-android.html

  • 对于我来说,替换后工作:String encodedImage = Base64.encode(byteArrayImage,Base64.DEFAULT); By:String encodedImage = Base64.encodeToString(byteArrayImage,Base64.DEFAULT); (4认同)
  • 有没有人意识到这个方法对文件进行了无意义的重新压缩?为什么这么赞成?Chandra Sekhar的答案是最有效率的. (3认同)

Cha*_*har 99

而不是使用Bitmap,你也可以通过琐碎的方式做到这一点InputStream.嗯,我不确定,但我觉得它有点高效

InputStream inputStream = new FileInputStream(fileName);//You can get an inputStream using any IO API
byte[] bytes;
byte[] buffer = new byte[8192];
int bytesRead;
ByteArrayOutputStream output = new ByteArrayOutputStream();
try {
    while ((bytesRead = inputStream.read(buffer)) != -1) {
    output.write(buffer, 0, bytesRead);
}
} catch (IOException e) {
e.printStackTrace();
}
bytes = output.toByteArray();
String encodedString = Base64.encodeToString(bytes, Base64.DEFAULT);
Run Code Online (Sandbox Code Playgroud)

  • 当然,这更有效。只是将文件转换为其base64表示形式,并避免了图像的绝对无意义的重新压缩。 (3认同)
  • +1表示更有效的方式. (2认同)
  • @ user2247689当您尝试访问文件时,您必须提供文件的完整路径,包括其名称.如果文件存在于源程序所在的同一路径中,则文件名就足够了. (2认同)
  • 问题是“ 8192”在这里表示什么,它是文件大小还是什么? (2认同)

Sta*_*Man 6

如果您需要base64 over JSON,请查看Jackson:它明确支持二进制数据读/写为低级别(JsonParser,JsonGenerator)和数据绑定级别的base64.因此,您可以使用具有byte []属性的POJO,并自动处理编码/解码.如果重要的话,也非常有效率.

  • 你真的在我的回答中看到了这个链接吗? (4认同)

Sam*_*Sam 6

Kotlin 中的编码和解码代码如下:

 fun encode(imageUri: Uri): String {
    val input = activity.getContentResolver().openInputStream(imageUri)
    val image = BitmapFactory.decodeStream(input , null, null)

    // Encode image to base64 string
    val baos = ByteArrayOutputStream()
    image.compress(Bitmap.CompressFormat.JPEG, 100, baos)
    var imageBytes = baos.toByteArray()
    val imageString = Base64.encodeToString(imageBytes, Base64.DEFAULT)
    return imageString
}

fun decode(imageString: String) {

    // Decode base64 string to image
    val imageBytes = Base64.decode(imageString, Base64.DEFAULT)
    val decodedImage = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.size)

    imageview.setImageBitmap(decodedImage)
}
Run Code Online (Sandbox Code Playgroud)


kri*_*rma 5

// put the image file path into this method
  public static String getFileToByte(String filePath){
      Bitmap bmp = null;
      ByteArrayOutputStream bos = null;
      byte[] bt = null;
      String encodeString = null;
       try{
        bmp = BitmapFactory.decodeFile(filePath);
        bos = new ByteArrayOutputStream();
        bmp.compress(Bitmap.CompressFormat.JPEG, 100, bos); 
        bt = bos.toByteArray();
        encodeString = Base64.encodeToString(bt, Base64.DEFAULT);
      }catch (Exception e){
        e.printStackTrace();
      }
      return encodeString;
}
Run Code Online (Sandbox Code Playgroud)