구글에서 제공하는 오픈소스로 Zebra Crossing의 약자. QR코드 스캔 애플리케이션의 대다수가 이 애플리케이션을 이용했다고 해도 과언이 아닐정도로 널리 쓰이고 있는 코드다.
https://github.com/zxing/zxing
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.5.0</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.5.0</version>
</dependency>
QR을 만들 url을 입력받는 창
<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
<body>
QR CODE
<form action="/test/qrCode", method="get">
<input type="text" name="url"/><button type="submit">create</button>
</form>
</body>
@RequestMapping(value = {"/qrCode"})
public Object createQr(@RequestParam String url) throws WriterException, IOException {
int width = 200;
int height = 200;
BitMatrix matrix = new MultiFormatWriter().encode(url, BarcodeFormat.QR_CODE, width, height);
try (ByteArrayOutputStream out = new ByteArrayOutputStream();) {
MatrixToImageWriter.writeToStream(matrix, "PNG", out);
return ResponseEntity.ok()
.contentType(MediaType.IMAGE_PNG)
.body(out.toByteArray());
}
}
url을 특정 높이와 너비의 BitMatrix 로 생성 한 후, MultiFormatWriter.encode()메소드를 이용한다. 반환되는 객체는 boolean형 2차원 배열로 표현된 바코드(QR코드) 모델로, BitMatrix이다.
MatrixToImageWriter.writeToStream()(QRCode를 저장하지 않고 함수에서 바이트 배열로 반환하려는 경우 다음을 사용할 수 있다. - zxing 라이브러리에서 제공하는 메소드)를 활용해서 이미지로 출력 해 주는 코드이다. QR 코드 이미지를 http 요청에 대한 응답으로 반환하려는 경우. http 응답의 본문에서 바이트 배열을 반환할 수 있다.
테스트할 url을 넣고 create 버튼을 누르면 아래와 같이 QR code가 새창으로 생성된다.
핸드폰으로 카메라로 확인해보자!
QR code로 잘 링크되어 넘어가는 걸 확인할 수 있다.
reference
https://www.callicoder.com/generate-qr-code-in-java-using-zxing/