在Android中无法将位图转换为完美的Base64字符串?

12

我正在开发一个应用程序,在其中需要从相机中捕获图像。捕获后,我需要将位图转换为Base64格式。在转换为Base64格式后,我需要将该字符串发送到服务器。我使用以下代码执行此任务:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] b = baos.toByteArray();
base64Image = Base64.encodeToString(b,Base64.DEFAULT);

问题: 当我将该Base64转换为图像时,我得到的是不完整的图像。在我的服务器上也出现了同样的结果,我的图像无法从Base64字符串完美地重构。

请给我建议解决方案。我已经进行了大量搜索,并且得到了与我现在使用的相同代码。

编辑:请查看下面的不完整图像

输入图像描述

用于捕获图像的代码:

intent = new Intent("android.media.action.IMAGE_CAPTURE");
startActivityForResult(intent, TAKE_PHOTO);

你收到的是什么样的不完整图像 - Muhammad Babar
这个问题是针对所有图片还是某些特定的图片出现的? - Muhammad Babar
从base64字符串中,只生成了25%的图像...并且所有图像都出现了这种情况。 - Sam-In-TechValens
看,我已经发布了图片...图片的大小与原始大小完全一样...但只有25%的上部分被生成了...其余部分没有完成。 - Sam-In-TechValens
你是否正在使用BitmapFactory.Options中的options.inSampleSize来改变图像的大小? - Muhammad Babar
http://megacodearchive.com/Page/Content/51683/Base64-encoderdecoder - General Grievance
2个回答

3

好的,我解决了它。问题在于数据库中base64字符串的存储。我的列被声明为“TEXT”,因为字符串的长度,所以它截断了其他图片部分。所以我将其更改为“LONGTEXT”,现在它完美地工作了!


1
非常感谢您,您让我的一天变得美好。我也遇到了同样的问题,所以我将我的“BLOB”数据类型转换为“LONGBLOB”。 - Priya Jagtap

0
当我将Base64转换为图像时,我得到了不完整的图像。 请尝试使用您的图像位图进行此操作,并检查是否有异常。
Bitmap originalBitmap = (Bitmap) data.getExtras().get("data"); //or whatever image you want
Log.d(TAG, "original bitmap byte count: " + originalBitmap.getByteCount());

ByteArrayOutputStream baos = new ByteArrayOutputStream();
originalBitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
Log.d(TAG, "byte array output stream size: " + baos.size());

byte[] outputByteArray = baos.toByteArray();
Log.d(TAG, "output byte array length: " + outputByteArray.length);

String base64EncodedString = Base64.encodeToString(outputByteArray, Base64.DEFAULT);
Log.d(TAG, "base64 encoded string length: " + base64EncodedString.length());

byte[] inputByteArray = Base64.decode(base64EncodedString, Base64.DEFAULT);
Log.d(TAG, "input byte array length: " + inputByteArray.length);

ByteArrayInputStream bais = new ByteArrayInputStream(inputByteArray);
Log.d(TAG, "byte array input stream size: " + bais.available());

Bitmap decodedBitmap = BitmapFactory.decodeStream(bais);
Log.d(TAG, "decoded bitmap byte count: " + decodedBitmap.getByteCount());

Log.d(TAG, "decoded bitmap same as original bitmap? " + decodedBitmap.sameAs(originalBitmap));

如果一切正常,那么问题就不是base64编码的问题。请告诉我!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接