如何将位图转换为PNG,然后转换为Android中的base64?

时间:2013-12-18 11:16:41

标签: android image bitmap png base64

正如标题所暗示的,我正试图让我的Android应用程序的用户从他的设备中选择一个图像(完成),然后我想缩小图像(完成),压缩/转换图像到png并将其作为base64字符串发送给API。

所以我现在调整图像大小如下:

options.inSampleSize = calculateInSampleSize(options, MAX_IMAGE_DIMENSION, MAX_IMAGE_DIMENSION);
options.inJustDecodeBounds = false;
Bitmap bitmap = BitmapFactory.decodeFile(path, options);

然后我有一个位图,我想将其转换为PNG,然后从那里转换为base64。我找到了一些示例代码转换为PNG并将其存储在设备here上。

try {
       FileOutputStream out = new FileOutputStream(filename);
       bmp.compress(Bitmap.CompressFormat.PNG, 90, out);
       out.close();
} catch (Exception e) {
       e.printStackTrace();
}

问题在于我不想保存图像。我只想将它作为PNG保存在内存中,然后将其进一步转换为base64字符串。

有没有人知道如何将图像转换为png并将其存储在变量中,甚至更好,立即将其转换为base64?欢迎所有提示!

1 个答案:

答案 0 :(得分:26)

尝试将位图转换为png:

 bitmap.compress(Bitmap.CompressFormat.PNG, quality, outStream);

检查method's documentation

您可以直接将位图转换为Base64。用它来编码和解码Base64。

public static String encodeToBase64(Bitmap image)
{
    Bitmap immagex=image;
    ByteArrayOutputStream baos = new ByteArrayOutputStream();  
    immagex.compress(Bitmap.CompressFormat.JPEG, 100, baos);
    byte[] b = baos.toByteArray();
    String imageEncoded = Base64.encodeToString(b, Base64.DEFAULT);

    Log.e("LOOK", imageEncoded);
    return imageEncoded;
}

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