【发布时间】:2017-10-27 14:41:47
【问题描述】:
对不起,如果我做了一些愚蠢的事情。我想做的是从android中的camera2 api捕获图像,然后将该图像转换为base64编码,下面是我的代码
private String getBase64Image(Bitmap bitmap) {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 15, byteArrayOutputStream);
byte[] bytes = byteArrayOutputStream.toByteArray();
String base64Image = Base64.encodeToString(bytes, Base64.NO_WRAP);
return base64Image;
}
private void decodeBase64Image(String base64Image) {
byte[] bytes = Base64.decode(base64Image, Base64.NO_WRAP);
Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
imageView.setVisibility(View.VISIBLE);
imageView.setImageBitmap(bitmap);
saveFile(bytes);
}
这里是我如何捕捉图像
@Override
public void onImageAvailable(ImageReader imageReader) {
Image image = imageReader.acquireLatestImage();
ByteBuffer byteBuffer = image.getPlanes()[0].getBuffer();
byte jpegBytes[] = new byte[byteBuffer.remaining()];
byteBuffer.get(jpegBytes);
Bitmap imageBitmap = BitmapFactory.decodeByteArray(jpegBytes, 0, jpegBytes.length);
String base64Image = getBase64Image(imageBitmap);
Log.d("mi", "widthpx:" + image.getWidth() + " heightpx:" + image.getHeight());
Log.d("mi", "Base64Image:" + base64Image);
decodeBase64Image(base64Image);
image.close();
}
}, null);
上面的代码可以正常工作,它将图像转换为 base64 编码,然后对其进行解码并设置在我可以看到的 imageview 上。到这里为止它工作得很好。但问题是,当我使用 base64 编码并尝试使用一些在线 base64 字符串到图像转换器时,它不会给我任何结果。下面是我如何获取 base64 编码的字符串
/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDADUlKC8oITUvKy88OTU/UIVXUElJUKN1e2GFwarLyL6qurfV8P//1eL/5re6///////////zv////////////2wBDATk8PFBGUJ1XV53/3Lrc//// ///////////////////////////////////////// ////////////// wAARCA2YEiADASIAAhEBAxEB / 8QAGQABAQEBAQEAAAAAAAAAAAAAAAECAwQF / 8QALBABAQACAgICAgIDAAIDAQEBAAECESExA0ESEzJRImEEcYEzQhQjkaGx0f / EABcBAQEBAQAAAAAAAAAAAAAAAAABAgP / xAAbEQEBAQEAAwEAAAAAAAAAAAAAARECITFBEv / aAAwDAQACEQMRAD8A56NNDKsaNNppRnRprRoE0aU0gg1o + IMrI3MV + IMyNTFqRQZmI0lBmpWmbAQVAEym2gHmyx1WHpyx3HHKaqjB7VAalVjpZQUAG8ctO + Hk3w8rWOVlB7ZVcMPI645bQaAAAAABFAAABUAABQFEQFFABAAAAAAAAUAAAAAAVAFQAAAAAAAAAAAAAABAAAAAAAAAABUAUABFAEAUVFAAAAAEUAAAAAAQAAVAVRAFEUAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAABUAAUEFARUAUABFQAAFQAUQAABUVAAAUEAAAFAQAAAAABUUEIAAAAAAAAAAACKgCKgAACKgDn5brHbd4eXzZ / K69A55XdtZNih7CKInsVBTtvGM4x1wm + QbxjciSNyAsVIqAKAigAAAAAKAigAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAigAAAAAAAAAAAAAAACgigCKAAAAAAAAAAAAAAAAAAAAAAAAAAKAigICgiooCKgKioCggKIoCAACgigCCgIoAAAIqAKigAAAAiooCACgAAAAACAKAAigA ACKgKAAioCgAAAgKCCgAACKgKIoAAAAIKAAAAAAAAAAAAAAAAAIoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAigCKAgoCI0gJpGjQM6NNJYDOk02aBjRY1o0DGjTek0DGjTek0DOkb0mgZqN2JoGRrSaBNC6NAyKaBFNAIKKIKiACggAoAIENAAAKixdAmlkWRqQEkakWRrQJpdCggoKgoCCgIoAi6FBNCgJoUANCggAgqKAAAAKAAaUAAACACooAmlAQVdAyLoBAAQUBBQR4vifF00aFcviadPifERz0adNLoHP4kxdNGgZ + K / FrQKkgoCCgiI0zQRFSggAAKBpjPHcdDXAPJlNMvT5MJXnuNijIukBdrKysBrhEUGpbHTHNxJaD2457jUryY52OuHk / aDuMTJrYKCAoAAAAAAAAAAACoAogCiKCKiigAAACKAAAAAAAAAACAAAG4AU2WwUE + UT5QRoZ + UT5g2MfOJ9kB0HP7Il8kUdRy + W + xB1HH7T7Qdhx + 2H2g7DjPLF + Z + wdRy + xftgOg5 / ZF + yA6Iz84fKA0JtdgogCgAigKAAAAACAAAAoACiKICKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwAAAFBAAAAAAAAUAEVAAAAFBAAAAFEBUUARQEBQAQBQBAABUAVAAAAAAAAAAAAAAAAABAARUAABCiWgx5ctYvJld3bp5c93iuVu4ogAApREOxZBWsY7YTUc8I7QFjciSNAKCCKAAAAKAigAAAAAAAAAoCAAAAoAAAIKAgqAKigAAAAAAAAAAAAAAAAAAAACoACggoCAoIoAAAAAAAAAAAAAAAAAAAAAAAAACgIAAAAqKAioAqKAgoAACKgBABQAAAAAAAAAAAAARQAAAAAABFRQAQFAAABKKAAAAAAmwFEAAAUAQABQAAAAAAAAAQAURQAAAABAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAABAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEUAEVABQENKgCaUBNGlAZ0aa0mgZ0aaNAxpNOmk0DGk06aTQMaNNaNAzpNN6TQM6NNaNAwNaNAyLo0CBo0Ai6AEUBFFAa0kjcgEiyGmoBpQAAAFBUFARQBFRQAAAADQoCKgAKAIoARQQUBBQAFBNLoUE0KAgAgACm0BVABNGlAZFqAAA86gAABoAQAFAAABEFARFqAlZrVQGRUAVFAajLUA0554ccOq62DxXHTD15 + PcrhlhYo5KuUqaA2CA0RFgCy6QB1xzdcfI8suqsysB7Jk1t48fJZ7dp5dA7K5zOWdtTKX2g0JtQAAAAAAAAAAAAAAVAFUABAEFQBRNpsGhn5SJ84DY53yM3y6B12bcL5Uvk / sHo2lyk9vLfJ / aXyX2D1fOM3yx5vmnyqj0 / bP2l8s9V5vkfIHe + U + yvPs2DtfJU + yuVpsHT53ZfJXMoN / ZT51gBr5HyrC7Br52HyrNQG /升+ 0 + VZAa2fLSIDXyp8rGQG / kfJkBv5r89OSg6fOrPJ / blsB3nlanl / t5trAeqeRZ5I8u1mVgPZM5 + 1 + TxzyNzy0Hql2PPPK6TySoOoxM41uCqIogAAAKAAAAACAACooAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqUiggAAAAAAAAAAAAqAAAKIoIAAqAKCAoAAAAigAAAAAAgAKIAAAAAAAAAAAAAAAAAAAgICoAAIBXLy5axrpldR5PLn8qo53lFqAAAqLekBZGsYzO3XCcg3jOG8YkbkBqKggoigAoCKAiooAAAAAAAAAAAoCKAAAAAAAAAAAAAAAAAAAAAAAAAAAKgoIKgAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgIAAqAogCgACKAigIoAAAAAAAAAAAAAAAAAAAAAAgCgAAAAAAAAAgAoIAk7UBQAAAAQBQAAAAAAAAAABBUAUAAAAAEUBBQAAEU AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEUARQEFAEVAAADQAiNaT2KJppBE0aU0DOjTWjQMaNNaNAxo03o0Dno03o0DGjTWjQM6NNaNAxpdNaWQEkahpYCwNKAAAACgCgACKAAAAAAAKgICgqKigAAAAoigAAoigbEUBUBFAABYBo0trOwURRRKIAAAADzgACgIKgAACgCCgiAAJQBKy1WQRFQBUAVYiitRWY0IaYzw22t5UeTPx65jleHtuLjn490HnGssdcVmggAKIAoi7BV2yoNTPTePk5cVB6cfJGp5Hk2syoPZM41t5Jnf2s8lB6tjzzytTyoOyuM8q / YDqOX2RfnAdBz + yH2QHQcvsh9gOptx + 0 + xR1V575Uvl / QPRs + Ueb7f7ZvkB6rkl8k6eb7KnzB6b5Jtm + WPPcqztB6b5mfscNmwdfsS5uexRq51N2sgL8qbQBTaAG12yoAAAAED0gLAADaKAAAAAAAAAAAqAAACxABUAU2lAU2QBdtfK / tg2Drj5HSeR5trsHrnkm25k8UysbxzoPZtXDHyt45y + 0HQSZQBRAVQAABAABUUARQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAQAAAAAAAAAAAAAAFAQAAFBBUBUVAUEBUABUAURQAARRAAAAAAAAAAAAAAAAAAAAARFAQABNiZXUoOflz1NR5cq15cvlkxVEAEUNHoC1ILBWsZt2xmmMY6yAsjcMY0gigAAACgAAAAAAAAAAAAKigAAAAAACKAAAAAAAAAAAAAAAAAKgAqAAoIqKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggAAKCCoCoAAKCAoAACKAAAigAigCKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIoAigAAIqKAAAAAAAAAAAAAAAACUAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
解决方案
正如@toble 的回答,我没有在 Log.d() 中获得完整的 base64Image 字符串,所以我为记录完整的 base64Image 所做的操作如下。
private void logLargeString(String content) {
if (content.length() > 3000) {
Log.d("mi", content.substring(0, 3000));
logLargeString(content.substring(3000));
} else {
Log.d("mi", content);
}
}
希望这对其他人有帮助。
【问题讨论】:
标签: java android encoding base64 android-camera2