使用字节数组中的android.util.Base64.encodeToString创建图像数据URL

时间:2013-08-03 08:51:27

标签: android base64 data-url

我一直在尝试使用以下代码从字节数组生成图像数据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的结果传送到文件来测试数据URL输出,复制整行,并将其粘贴到Chrome中。

我在chrome中看到的是完全空白的。如果我在Chrome检查器中检查它,则会显示一个尺寸正确的空白JPG。

我尝试将其下载为jpg文件并使用Windows Photo Viewer打开它。它似乎已被破坏:

Corrupted Image Sample

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

1 个答案:

答案 0 :(得分:0)

实际问题是由logcat的缓冲区大小限制造成的。

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

有关logcat缓冲区大小的详细信息,请参阅this question