개발 기록이
[JAVA] QRCode 이미지 생성하기 본문
자바를 사용하여 원하는 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)
7. http://localhost:8080/qrDownload.do로 이동하면 QRCode.png QR코드 이미지 생성 및 다운로드 완료
자바 아이콘 제작자: Alfredo Hernandez - Flaticon
출처 : OpenAI ChatGPT (https://openai.com)
'웹 개발 > Back-end' 카테고리의 다른 글
[Spring] dofilter filterchain 이란? (0) | 2024.08.23 |
---|---|
[JAVA] Math.random(), Random 클래스, SecureRandom 클래스로 난수 생성하기 (0) | 2024.07.10 |
[JAVA] 파일 다운로드 url 생성하기 (0) | 2024.05.25 |
[JAVA] File, Files 클래스 정리 (0) | 2024.04.20 |
[웹개발] 파일기능(2) MultipartFile와 MultipartHttpServletRequest 로 파일 저장하기 (0) | 2024.04.13 |