簡體   English   中英

Base64編碼無法在Android外部使用

[英]Base64 encoding not working outside android

對不起,如果我做傻事。 我想做的是從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 ////////////////////////////////////// 3 / 2WAT ///////////////////////////////////////////////////// /////////// wAARCA2YEiADASIAAhEBAxEB / 8QAGQABAQEBAQEAAAAAAAAAAAAAAAECAwQF / 8QALBABAQACAgICAgIDAAIDAQEBAAECESExA0ESEzJRImEEcYEzQhQjkaGx0f / EABcBAQEBAQAAAAAAAAAAAAAAAAABAgP / xAAbEQEBAQEAAwEAAAAAAAAAAAAAARECITFBEv / aAAwDAQACEQMRAD8A56NNDKsaNNppRnRprRoE0aU0gg1o + IMrI3MV + IMyNTFqRQZmI0lBmpWmbAQVAEym2gHmyx1WHpyx3HHKaqjB7VAalVjpZQUAG8ctO + Hk3w8rWOVlB7ZVcMPI645bQaAAAAABFAAABUAABQFEQFFABAAAAAAAAUAAAAAAVAFQAAAAAAAAAAAAAABAAAAAAAAAABUAUABFAEAUVFAAAAAEUAAAAAAQAAVAVRAFEUAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAABUAAUEFARUAUABFQAAFQAUQAABUVAAAUEAAAFAQAAAAABUUEIAAAAAAAAAAACKgCKgAACKgDn5brHbd4eXzZ / K69A55XdtZNih7CKInsVBTtvGM4x1wm + QbxjciSNyAsVIqAKAigAAAAAKAigAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAigAAAAAAAAAAAAAAACgigCKAAAAAAAAAAAAAAAAAAAAAAAAAAKAigICgiooCKgKioCggKIoCAACgigCCgIoAAAIqAKigAAAAiooCACgAAAAACAKAAigAACK gKAAioCgAAAgKCCgAACKgKIoAAAAIKAAAAAAAAAAAAAAAAAIoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAigCKAgoCI0gJpGjQM6NNJYDOk02aBjRY1o0DGjTek0DGjTek0DOkb0mgZqN2JoGRrSaBNC6NAyKaBFNAIKKIKiACggAoAIENAAAKixdAmlkWRqQEkakWRrQJpdCggoKgoCCgIoAi6FBNCgJoUANCggAgqKAAAAKAAaUAAACACooAmlAQVdAyLoBAAQUBBQR4vifF00aFcviadPifERz0adNLoHP4kxdNGgZ + K / FrQKkgoCCgiI0zQRFSggAAKBpjPHcdDXAPJlNMvT5MJXnuNijIukBdrKysBrhEUGpbHTHNxJaD2457jUryY52OuHk / aDuMTJrYKCAoAAAAAAAAAAACoAogCiKCKiigAAACKAAAAAAAAAACAAAG4AU2WwUE + UT5QRoZ + UT5g2MfOJ9kB0HP7Il8kUdRy + W + xB1HH7T7Qdhx + 2H2g7DjPLF + Z + wdRy + xftgOg5 / ZF ++ PcrhlhYo5KuUqaA2CA0RFgCy6QB1xzdcfI8suqsysB7Jk1t48fJZ7dp5dA7K5zOWdtTKX2g0JtQAAAAAAAAAAAAAAVAFUABAEFQBRNpsGhn5SJ84DY53yM3y6B12bcL5Uvk / sHo2lyk9vLfJ / aXyX2D1fOM3yx5vmnyqj0 / bP2l8s9V5vkfIHe + U + yvPs2DtfJU + yuVpsHT53ZfJXMoN / ZT51gBr5HyrC7Br52HyrNQG /升+ 0 + VZAa2fLSIDXyp8rGQG / kfJkBv5r89OSg6fOrPJ / blsB3nlanl / t5trAeqeRZ5I8u1mVgPZM5 + 1 + / YDqOX2RfnAdBz + yH2QHQcvsh9gOptx + 0 + xR1V575Uvl / QPRs + Ueb7f7ZvkB6rkl8k6eb7KzBQBQBQBQBQBQBQBQBQBQBQBQBQB2B6B6B6B6B6B6B6B6B6B6B6B5E0 12yoAAAAED0gLAADaKAAAAAAAAAAAqAAACxABUAU2lAU2QBdtfK / tg2Drj5HSeR5trsHrnkm25k8UysbxzoPZtXDHyt45y + 0HQSZQBRAVQAABAABUUARQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAQAAAAAAAAAAAAAAFAQAAFBBUBUVAUEBUABUAURQAARRAAAAAAAAAAAAAAAAAAAAARFAQABNiZXUoOflz1NR5cq15cvlkxVEAEUNHoC1ILBWsZt2xmmMY6yAsjcMY0gigAAACgAAAAAAAAAAAAKigAAAAAACKAAAAAAAAAAAAAAAAAKgAqAAoIqKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggAAKCCoCoAAKCAoAACKAAAigAigCKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIoAigAAIqKAAAAAAAAAAAAAAAACUAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

正如從@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);
    }
}

希望這對其他人有幫助。

您的base64字符串僅包含jpeg圖像的開頭。 圖像的僅前60行包含實際的彩色像素。

確保使用完整的base64字符串,並且您應該能夠看到完整的圖像。 您可能使用了用以下命令記錄的字符串:

            Log.d("mi", "Base64Image:" + base64Image);

輸出可能在logcat中裁剪。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM