我正在尝试使用以下代码将位图编码为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);
}
如何知道编码是否错误?我使用这个网站:
答案 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);
注意强>
这个答案来自:
答案 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字符串是正确的。