从字节数组使用android.util.Base64.encodeToString创建图像数据Url

从字节数组使用android.util.Base64.encodeToString创建图像数据Url,android,base64,data-url,Android,Base64,Data Url,我一直在尝试使用以下代码从字节数组生成图像数据URL: ByteArrayOutputStream byteArrayOutStream = new ByteArrayOutputStream(); /* Fill byteArrayOutStream with data */ StringBuilder stringBuilder = new StringBuilder(); String encodedData = Base64.encodeToString(byteArrayOutS

我一直在尝试使用以下代码从字节数组生成图像数据URL:

ByteArrayOutputStream byteArrayOutStream = new ByteArrayOutputStream();

/* Fill byteArrayOutStream with data */

StringBuilder stringBuilder = new StringBuilder();

String encodedData = Base64.encodeToString(byteArrayOutStream.toByteArray(),
                                           Base64.NO_WRAP);

stringBuilder.append("data:image/jpeg;base64,");
stringBuilder.append(encodedData);

// Log the result
android.util.Log.d("Base64Test", stringBuilder.toString());
byteArrayOutStream包含正确的数据,因为我已经测试过将其保存为jpg文件并在设备上查看

我通过将logcat的结果管道化到一个文件中,复制整行内容,并将其粘贴到Chrome中来测试数据URL输出

我在chrome中看到的是完全空白的。如果我在Chrome inspector中检查它,就会看到一个大小正确的空白JPG

我试着将其下载为jpg文件,并用Windows照片查看器打开它。它似乎被破坏了:


但左上角图像唯一可见的部分是正确的数据。

实际问题是由于logcat的缓冲区大小受到限制而导致的

stringBuilder确实保存了正确的数据,但是在日志中打印时,它会被有限的缓冲区大小截断。只需添加一个for循环,所有内容都将打印出来

有关logcat缓冲区大小的更多信息,请参阅