位图到Base64字符串

时间:2016-08-29 06:09:09

标签: android bitmap base64 encode

我正在尝试使用以下代码将位图编码为base64字符串,但我总是得到错误的编码。

顺便说一下,filePath是图像文件路径。

public String encode(String filePath) {
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    Bitmap bitmap = BitmapFactory.decodeFile(filePath, options);
    bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
    byte[] byte_arr = stream.toByteArray();
    return Base64.encodeToString(byte_arr, Base64.DEFAULT);
}

如何知道编码是否错误?我使用这个网站:

http://codebeautify.org/base64-to-image-converter

4 个答案:

答案 0 :(得分:3)

尝试此代码,它为我做了正确的编码。希望它可以帮助你。

public String getStringImage(Bitmap bmp) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] imageBytes = baos.toByteArray();
String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);
return encodedImage;
}

答案 1 :(得分:0)

试试这个:

public String getImageEncodedData(String path) {
       File f = new File(path);
       Bitmap imageBitmap = null;
       try {
           imageBitmap = BitmapFactory.decodeStream(new FileInputStream(f));
       } catch (FileNotFoundException e) {
           e.printStackTrace();
       }
       //added for testing base 64
       ByteArrayOutputStream baos = new ByteArrayOutputStream();
       imageBitmap.compress(Bitmap.CompressFormat.JPEG, 80, baos);
       byte[] imageBytes = baos.toByteArray();
       String mImageEncodedString = Base64.encodeToString(imageBytes, Base64.DEFAULT);
//       Log.e("TAG", "imageEncodedString: " + mImageEncodedString);
       return mImageEncodedString;
   }

答案 2 :(得分:0)

正如@kdeogharkar指出的那样,你的代码看起来很好。

首先,检查您是否有正确的文件路径。然后在访问外部文件时检查您是否需要权限。

为了在加载大比例图像时处理OOM,我们可以使用:

File sd = Environment.getExternalStorageDirectory();
File image = new File(sd+filePath, imageName);
BitmapFactory.Options bmOptions = new BitmapFactory.Options();
Bitmap bitmap = BitmapFactory.decodeFile(image.getAbsolutePath(),bmOptions);
bitmap = Bitmap.createScaledBitmap(bitmap,parent.getWidth(),parent.getHeight(),true);

然后使用以下解码和编码方法:

public static String encodeToBase64(Bitmap image, Bitmap.CompressFormat compressFormat, int quality)
{
    ByteArrayOutputStream byteArrayOS = new ByteArrayOutputStream();
    image.compress(compressFormat, quality, byteArrayOS);
    return Base64.encodeToString(byteArrayOS.toByteArray(), Base64.DEFAULT);
}

public static Bitmap decodeBase64(String input)
{
    byte[] decodedBytes = Base64.decode(input, 0);
    return BitmapFactory.decodeByteArray(decodedBytes, 0, decodedBytes.length);
}

使用示例:

String myBase64Image = encodeToBase64(myBitmap, Bitmap.CompressFormat.JPEG, 100);
Bitmap myBitmapAgain = decodeBase64(myBase64Image);

注意
这个答案来自:

  1. https://stackoverflow.com/a/28351881/4758255
  2. https://stackoverflow.com/a/9768973/4758255

答案 3 :(得分:0)

尝试使用NO_WRAP而不是DEFAULT

imgDom.attr("src", o.cphoto);

并使用此online tool将base64字符串(String stringEncode = Base64.encodeToString(byte_arr, Base64.NO_WRAP); return stringEncode; )转换为图片。如果能够生成图像,则base64字符串是正确的。