Base 64로 인코딩 된 QRGen QR 코드를 디코딩 할 수 없습니다.

thetechnician94

QRGen을 사용하여 QR 코드를 생성하고 Base64로 인코딩 한 다음 HTML 문자열에 이미지로 삽입하려고합니다. 나중에 HTML 문자열이 디코딩되어 JEditorPane에 표시되고 프린터로 전송됩니다. 이를 위해 ImageView 클래스가 확장되고 사용자 정의 View 팩토리가 사용됩니다. 이 모든 것이 잘 작동합니다 ... 가끔. 입력 문자열에 완전히 의존합니다. 일부 문자열은 문제없이 작동하고 다른 문자열은 오류로 인해 디코딩 프로세스가 실패합니다 java.lang.IllegalArgumentException: Input byte array has wrong 4-byte ending unit.

인코딩 프로세스는 다음과 같습니다.

 public BufferedImage generateQRCodeImage(String barcodeText) throws Exception {
        ByteArrayOutputStream stream = QRCode.from(barcodeText).to(ImageType.PNG).stream();
        ByteArrayInputStream bis = new ByteArrayInputStream(stream.toByteArray());
        return ImageIO.read(bis);
    }

    public static String encodeToString(BufferedImage image, String type) {
        String imageString = null;
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        try {
            ImageIO.write(image, type, bos);
            byte[] imageBytes = bos.toByteArray();
            Base64.Encoder encoder = Base64.getEncoder();
            imageString = encoder.encodeToString(imageBytes);
            bos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return imageString;
    }

디코딩 프로세스 :

        

        private Image loadImage() {
            String b64 = getBASE64Image();
            BufferedImage newImage = null;
            ByteArrayInputStream bais = null;
            try {
                bais = new ByteArrayInputStream(Base64.getDecoder().decode(b64.getBytes())); //fails here
                newImage = ImageIO.read(bais);
            } catch (Throwable ex) {
                ex.printStackTrace();
            }
            return newImage;
        }

        @Override
        public URL getImageURL() {
            String src = (String) getElement().getAttributes().getAttribute(HTML.Attribute.SRC);
            if (isBase64Encoded(src)) {

                this.url = BASE64ImageView.class.getProtectionDomain()
                        .getCodeSource().getLocation();

                return this.url;
            }
            return super.getImageURL();
        }

        private boolean isBase64Encoded(String src) {
            return src != null && src.contains("base64,");
        }

        private String getBASE64Image() {
            String src = (String) getElement().getAttributes().getAttribute(HTML.Attribute.SRC);
            if (!isBase64Encoded(src)) {
                return null;
            }
            return src.substring(src.indexOf("base64,") + 7, src.length() - 1);
        }

그리고 디코딩에 실패한 문제의 QR 코드가 있습니다.

<img width='30' height='30' src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH0AAAB9AQAAAACn+1GIAAAApklEQVR4Xu2UMQ4EMQgD/QP+/0vK6zjsvayUMmavWxQpMAUBkwS12wcveAAkgNSCD3rR5Lkgoai3GUCMgWqbAEYR3HxAkZlzU/0MyBisYRsgI1ERFfcpBpA+ze6k56Cj7KTdXNigFWZvSOpsgqLfd18i2aAukXh9TXBNmdWt5gzA/oqzWkkN8HtA7G8CNOwYAiZt3wZixUfkA32OHNQq7Bxs9oI/gC/9fV8AVCkPjQAAAABJRU5ErkJggg=='/>

위의 QR을 브라우저 (Chrome)에서 열었 더니 작동합니다. 이는 확실히 인코딩 프로세스가 아닌 디코딩 프로세스에서 문제가 있음을 나타냅니다.

thetechnician94

문제를 발견했습니다. getBASE64Image ()에서

private String getBASE64Image() {
            String src = (String) getElement().getAttributes().getAttribute(HTML.Attribute.SRC);
            if (!isBase64Encoded(src)) {
                return null;
            }
            return src.substring(src.indexOf("base64,") + 7, src.length() - 1);
        }

하위 문자열 호출의 "-1"이 내 문제의 원인이었습니다. 왜 이것이 때때로 작동하는지 확실하지 않지만 제거하면 문제가 해결 된 것 같습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

base64로 인코딩 된 이미지를 디코딩 할 수 없습니다.

분류에서Dev

Java로 인코딩 된 PHP에서 base64로 데이터를 디코딩 할 수 있습니까?

분류에서Dev

XUGGLER로 인코딩 된 오디오를 재생할 수 없습니다.

분류에서Dev

Chrome 브라우저에 표시된 Base64 인코딩 PDF를 다운로드 할 수 없음

분류에서Dev

openssl이 PHP의 base64_encode 함수로 인코딩 된 문자열을 디코딩 할 수없는 이유는 무엇입니까?

분류에서Dev

OpenCv QR 코드가 감지되었지만 디코딩 할 수 없습니다.

분류에서Dev

base64 인코딩 문자열 : PHP에서는 디코딩 할 수 있지만 Java에서는 디코딩 할 수 없습니까?

분류에서Dev

base64에서 디코딩 된 인 텐트에서 이미지를 열 수 없습니다.

분류에서Dev

PHP로 인코딩 된 일부 utf-8 문자열 base64는 iOS base64 라이브러리를 사용하여 디코딩 할 수 없습니까?

분류에서Dev

rabbitmq 대기열의 base64 '페이로드'문자열을 제대로 디코딩 할 수 없습니다.

분류에서Dev

큰 base64로 인코딩 된 Blob 디코딩

분류에서Dev

워터 마크 용으로 base64로 인코딩 된 이미지를 처리 할 수 있습니까?

분류에서Dev

python3에서 pyzbar를 사용하여 QR 코드를 디코딩 할 수 없습니다.

분류에서Dev

유효한 Base64 문자열을 디코딩 할 수 없습니다.

분류에서Dev

Base64 문자열을 신속하게 디코딩 할 수 없습니다.

분류에서Dev

base32 / 64로 인코딩 된 MD5 해시를 알파 정렬 할 수 있습니까?

분류에서Dev

base64로 인코딩 된 파일을 디코딩하고 결과를 콘솔에 인쇄합니다.

분류에서Dev

PHP를 사용하여 16 비트에서 BASE64로 인코딩 된 부호있는 정수 디코딩

분류에서Dev

소켓을 통해 수신 된 배열 요소 (문자열로 인코딩 됨)를 디코딩 할 수 없습니다.

분류에서Dev

Java-Base64로 인코딩 된 인증서를 디코딩하는 방법

분류에서Dev

ASP 사이트에서 알 수없는 형식으로 인코딩 된 URL을 디코딩 할 수 없습니다.

분류에서Dev

base64로 인코딩 된 shaX 바이너리 문자열을 어떻게 해독 할 수 있습니까?

분류에서Dev

bash에서 base 64로 인코딩 된 파일을 어떻게 소싱 할 수 있습니까?

분류에서Dev

파이썬은 utf-8로 인코딩 할 수 있지만 디코딩 할 수 없습니다.

분류에서Dev

c # Base64 인코딩 디코딩 잘못된 결과

분류에서Dev

NSManagedObject를 인코딩 및 디코딩 할 수 있습니까?

분류에서Dev

FFMPEG는 빠른 속도로 비디오를 인코딩 할 수 없습니다.

분류에서Dev

tastypie로 JSON 개체를 디코딩 할 수 없습니다.

분류에서Dev

쉽게 디코딩 할 수있는 경우 base64로 문자열을 인코딩하는 이유

Related 관련 기사

  1. 1

    base64로 인코딩 된 이미지를 디코딩 할 수 없습니다.

  2. 2

    Java로 인코딩 된 PHP에서 base64로 데이터를 디코딩 할 수 있습니까?

  3. 3

    XUGGLER로 인코딩 된 오디오를 재생할 수 없습니다.

  4. 4

    Chrome 브라우저에 표시된 Base64 인코딩 PDF를 다운로드 할 수 없음

  5. 5

    openssl이 PHP의 base64_encode 함수로 인코딩 된 문자열을 디코딩 할 수없는 이유는 무엇입니까?

  6. 6

    OpenCv QR 코드가 감지되었지만 디코딩 할 수 없습니다.

  7. 7

    base64 인코딩 문자열 : PHP에서는 디코딩 할 수 있지만 Java에서는 디코딩 할 수 없습니까?

  8. 8

    base64에서 디코딩 된 인 텐트에서 이미지를 열 수 없습니다.

  9. 9

    PHP로 인코딩 된 일부 utf-8 문자열 base64는 iOS base64 라이브러리를 사용하여 디코딩 할 수 없습니까?

  10. 10

    rabbitmq 대기열의 base64 '페이로드'문자열을 제대로 디코딩 할 수 없습니다.

  11. 11

    큰 base64로 인코딩 된 Blob 디코딩

  12. 12

    워터 마크 용으로 base64로 인코딩 된 이미지를 처리 할 수 있습니까?

  13. 13

    python3에서 pyzbar를 사용하여 QR 코드를 디코딩 할 수 없습니다.

  14. 14

    유효한 Base64 문자열을 디코딩 할 수 없습니다.

  15. 15

    Base64 문자열을 신속하게 디코딩 할 수 없습니다.

  16. 16

    base32 / 64로 인코딩 된 MD5 해시를 알파 정렬 할 수 있습니까?

  17. 17

    base64로 인코딩 된 파일을 디코딩하고 결과를 콘솔에 인쇄합니다.

  18. 18

    PHP를 사용하여 16 비트에서 BASE64로 인코딩 된 부호있는 정수 디코딩

  19. 19

    소켓을 통해 수신 된 배열 요소 (문자열로 인코딩 됨)를 디코딩 할 수 없습니다.

  20. 20

    Java-Base64로 인코딩 된 인증서를 디코딩하는 방법

  21. 21

    ASP 사이트에서 알 수없는 형식으로 인코딩 된 URL을 디코딩 할 수 없습니다.

  22. 22

    base64로 인코딩 된 shaX 바이너리 문자열을 어떻게 해독 할 수 있습니까?

  23. 23

    bash에서 base 64로 인코딩 된 파일을 어떻게 소싱 할 수 있습니까?

  24. 24

    파이썬은 utf-8로 인코딩 할 수 있지만 디코딩 할 수 없습니다.

  25. 25

    c # Base64 인코딩 디코딩 잘못된 결과

  26. 26

    NSManagedObject를 인코딩 및 디코딩 할 수 있습니까?

  27. 27

    FFMPEG는 빠른 속도로 비디오를 인코딩 할 수 없습니다.

  28. 28

    tastypie로 JSON 개체를 디코딩 할 수 없습니다.

  29. 29

    쉽게 디코딩 할 수있는 경우 base64로 문자열을 인코딩하는 이유

뜨겁다태그

보관