개발 기록이

[JAVA] QRCode 이미지 생성하기 본문

웹 개발/Back-end

[JAVA] QRCode 이미지 생성하기

studyingbackhoe 2024. 6. 2. 13:40

자바를 사용하여 원하는 URL로 이동할 수 있는 QR 코드 이미지를 다운로드하는 방법에 대해 알아보자.

@RequestMapping("/qrDownload.do")
public void qrDownload(HttpServletResponse response) throws WriterException {

    try {

        //QR코드 이미지 생성
        QRCodeWriter qrCodeWriter = new QRCodeWriter();
        Map<EncodeHintType, String> hintMap = new HashMap<>();
        hintMap.put(EncodeHintType.CHARACTER_SET, "UTF-8");

        BitMatrix bitMatrix = qrCodeWriter.encode("https://www.tistory.com/", BarcodeFormat.QR_CODE, 350, 350, hintMap);

        // 생성된 이미지 다운로드
        Path tempFile = Files.createTempFile("QRCode", ".png");
        MatrixToImageWriter.writeToPath(bitMatrix, "PNG", tempFile);

        response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
        String originalFileName = "QRCode.png";
        String encodedFileName = URLEncoder.encode(originalFileName, StandardCharsets.UTF_8.toString());
        response.setHeader("Content-Disposition", "attachment; filename=\"" + encodedFileName + "\"");

        try (InputStream inputStream = Files.newInputStream(tempFile);
             OutputStream outputStream = response.getOutputStream()) {

            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = inputStream.read(buffer)) != -1) {
                outputStream.write(buffer, 0, bytesRead);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }

        Files.deleteIfExists(tempFile);
        System.out.println("QR코드 이미지 생성 완료! ");

    } catch (IOException e) {
        System.err.println("QR코드 이미지 생성에 실패했습니다 ========  " + e.getMessage());
    }
}

 

 

1. build.gradle에 zxing 라이브러리를 추가한다.

dependencies {
    implementation 'com.google.zxing:core:3.4.1'
    implementation 'com.google.zxing:javase:3.4.1'
}

 

 

2. QR 코드를 생성하기 위해 zxing 라이브러리 클래스인 QRCodeWriter로 객체를 생성한다.

QRCodeWriter qrCodeWriter = new QRCodeWriter();

 

 

3. QR코드 이미지 생성에 필요한 설정을 추가한다. EncodeHintType은 zxing 라이브러리에서 사용되는 상수로 QR 코드 생성 시 사용되는 다양한 설정들을 제어하기 위해 사용된다.

Map<EncodeHintType, String> hintMap = new HashMap<>();
hintMap.put(EncodeHintType.CHARACTER_SET, "UTF-8");

 

 

4. QR코드 형식으로 인코딩하고 QR코드에 포함할 실제 데이터를 인자로 받고(QR코드로 이동할 url, 코드 형식, width, height, hintMap) QR 코드의 패턴을 표현하기 위한 BitMatrix 2차원 이진 데이터 배열 객체를 생성한다.

BitMatrix bitMatrix = qrCodeWriter.encode("https://www.tistory.com/", BarcodeFormat.QR_CODE, 350, 350, hintMap);

 

 

5. BitMatrix를 이미지 파일로 변환하고, 지정된 경로인 tempFile에 저장한다.

MatrixToImageWriter.writeToPath(bitMatrix, "PNG", tempFile);

 

 

6. 생성한 이미지를 다운로드할 수 있도록 로직을 추가한다.

(참고: https://studyingbackhoe.tistory.com/50)

 

[JAVA] 파일 다운로드 url 생성하기

프로젝트 내에 있는 특정 파일을 다운로드하는 url을 만들어보려고 한다.(다운로드할 파일의 경로 : http://localhost:8080/resources/file/sample.pdf)@RequestMapping("/downloadFile.do")public void downloadFile(HttpServletRespo

studyingbackhoe.tistory.com

 

 

7. http://localhost:8080/qrDownload.do로 이동하면 QRCode.png  QR코드 이미지 생성 및 다운로드 완료

 

자바 아이콘 제작자: Alfredo Hernandez - Flaticon

출처 : OpenAI ChatGPT (https://openai.com)