QR코드 만들기
안녕하세요! 오늘은 QR코드를 어떻게 만들 수 있는지에 대해 알아보겠습니다. :)
바코드와 QR코드의 차이
바코드
- 레이저(스캔 물체)를 수평 방향으로 인식해야 합니다.
- 최대 20자의 정보 저장이 가능합니다.
- 바코드의 일부가 훼손되어도 인식이 가능합니다.
- 단점: 정보 저장량이 적고 인식률이 낮습니다.
QR코드
- 어떤 방향으로 스캔해도 인식이 가능합니다 (대각선, 정방향, 역방향 등).
- 최대 숫자 7089자, 문자 4296자에 해당하는 정보 저장이 가능합니다.
- 인식률과 속도가 높습니다.
- 암호화, 위변조 방지 등 보안 기능이 존재합니다.
- 단점: QR코드는 수정, 삭제가 불가능합니다.
일상 생활에서 QR코드가 많이 활용되는 이유는 많은 정보를 저장할 수 있고, 인식률이 빠르기 때문입니다. ^^
QR코드 생성 방법
Google QR Codes API를 통한 방법
구글의 QR Codes API를 이용하면 쉽게 QR코드를 생성할 수 있습니다. 하지만 여러 절차와 인증 과정이 필요할 수 있습니다.
OpenSource를 통한 Local에서 생성
OpenSource 라이브러리를 사용하면 모든 과정을 직접 제어할 수 있어 편리합니다. 여기서는 'zxing' 오픈소스를 사용하여 QR코드를 생성해보겠습니다!
QR코드 생성 및 제공
라이브러리 추가
Gradle을 사용하여 'zxing' 라이브러리를 프로젝트에 추가합니다.
implementation group: 'com.google.zxing', name: 'javase', version: '3.5.0'
implementation group: 'com.google.zxing', name: 'core', version: '3.5.0'
요청 페이지 구성
간단하게 요청 링크를 구성해보겠습니다. index.html 내부에 아래와 같이 작성합니다.
<div>
<h3>내 티스토리 블로그 QR Code!</h3>
<a href="/qr/tistory">QR to Tistory!!</a>
</div>
Controller - QR코드 생성 및 제공
Spring Boot의 RestController를 사용하여 QR코드를 생성하고 제공하는 방법을 알아보겠습니다.
package boot.bootprac.qr.controller;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
/************
* @info: QR코드 생성 및 제공 Controller
* @name: QrController
* @date: 2023/03/24 5:32 PM
* @version: 1.0.0
* @Description:
************/
@RestController
@RequiredArgsConstructor
@Slf4j
public class QrController {
@GetMapping("/qr/tistory")
public ResponseEntity<byte[]> qrToTistory() throws WriterException, IOException {
// QR 정보
int width = 200;
int height = 200;
String url = "https://lucas-owner.tistory.com/";
// QRCode - BitMatrix: QR코드 정보 생성
BitMatrix encode = new MultiFormatWriter()
.encode(url, BarcodeFormat.QR_CODE, width, height);
// QRCode - Image 생성.: 1회성으로 생성해야 하기 때문에
// stream으로 Generate (1회성이 아니면 File로 작성 가능.)
try {
// outputStream
ByteArrayOutputStream out = new ByteArrayOutputStream();
// Bitmatrix, file.format, outputStream
MatrixToImageWriter.writeToStream(encode, "PNG", out);
return ResponseEntity.ok()
.contentType(MediaType.IMAGE_PNG)
.body(out.toByteArray());
} catch (Exception e) {
log.warn("QRCode OutputStream 도중 Exception 발생, {}", e.getMessage());
}
return null;
}
}
위 코드는 특정 URL에 대한 QR코드를 생성하고, 이를 PNG 이미지로 변환하여 제공하는 예제입니다. :)
QR코드 생성 및 제공 테스트
HTML 요청 링크 작성
index.html 파일에 아래와 같이 작성하여 QR코드 요청 링크를 추가합니다.
<div>
<h3>내 티스토리 블로그 QR Code!</h3>
<a href="/qr/tistory">QR to Tistory!!</a>
</div>
QR코드 생성 확인
웹 브라우저에서 /qr/tistory 링크로 이동하면 QR코드가 생성되어 표시되는 것을 확인할 수 있습니다.
핸드폰의 카메라로 QR코드를 스캔하면 해당 블로그 링크로 이동하는 것을 확인할 수 있습니다. ^^
추가 기능 - Image 전송 링크
Spring Boot 내부의 resources/image 폴더에 있는 이미지를 보여주는 방법도 함께 알아보겠습니다.
아래 코드는 서버 내부에 저장된 이미지를 QR코드로 생성하여 전송하는 예제입니다.
@GetMapping("/qr/image")
public ResponseEntity<byte[]> qrToImage() throws WriterException, IOException {
String text = "http://localhost:8080/qr/get/image";
// QR 정보
int width = 200;
int height = 200;
BitMatrix encode = new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, width, height);
try {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
MatrixToImageWriter.writeToStream(encode, "PNG", outputStream);
return ResponseEntity.ok()
.contentType(MediaType.IMAGE_PNG)
.body(outputStream.toByteArray());
} catch (Exception e) {
log.warn("QRCode Exceptions {}", e.getMessage());
}
return null;
}
위 코드는 QR코드에 서버 내부 이미지를 링크로 포함하여 제공하는 예제입니다. :)
이미지 파일 응답 처리
서버 내부의 이미지 파일을 응답으로 보내는 방법도 알아보겠습니다.
@GetMapping("/qr/get/image")
public ResponseEntity<byte[]> getImage() throws IOException {
// 이미지 파일 이름
String imageName = "java_logo_icon.png";
byte[] byteFile = getImageByte(imageName);
return ResponseEntity.ok()
.contentType(MediaType.IMAGE_PNG)
.body(byteFile);
}
private byte[] getImageByte(String imageName) throws IOException {
InputStream in = getClass().getResourceAsStream("/images/" + imageName);
return IOUtils.toByteArray(in);
}
위 코드는 Spring Boot에서 특정 경로에 있는 이미지를 바이트 배열로 변환하여 클라이언트에게 응답으로 보내는 예제입니다.
qr코드 만들기 - 결론
QR코드의 유용성
QR코드는 많은 정보를 빠르고 정확하게 전달할 수 있어 매우 유용합니다. 특히, 링크를 통한 접근이 빠르고 쉬워 일상 생활에서 많이 사용되고 있습니다. :)
직접 만들어보는 QR코드
이번 포스팅에서는 Spring Boot와 zxing 라이브러리를 사용하여 QR코드를 생성하고 제공하는 방법을 알아보았습니다. 직접 만들어보면 어렵지 않으니 한 번 시도해 보세요! ^^
더 궁금한 사항이 있으면 댓글로 남겨주세요! 감사합니다! :)
qr코드 만들기 - 추가 팁
QR코드를 생성할 때 커스터마이징 할 수 있는 방법들도 많습니다. 예를 들어, QR코드의 색상을 변경하거나, 로고를 삽입하는 것도 가능합니다. 이를 통해 더 멋진 QR코드를 만들어보세요!
MatrixToImageConfig customConfig = new MatrixToImageConfig(MatrixToImageConfig.BLACK, MatrixToImageConfig.WHITE);
MatrixToImageWriter.writeToStream(encode, "PNG", outputStream, customConfig);
위 코드는 QR코드의 색상을 커스터마이징하는 예제입니다. 다양한 옵션을 시도해보세요!
이상으로 QR코드 만들기에 대한 포스팅을 마치겠습니다. 유익한 시간이 되셨길 바랍니다! :)
다음에 또 만나요! ^^
여름철 실내적정온도 습도 알아보기
여름철 실내적정온도와 습도 관리덥다고 무작정 에어컨과 제습기에 의존하기보다는 적정 온도와 습도를 유지하여 건강한 여름을 보내는 것이 중요합니다.여름철 실내적정온도와 습도1. 적정
sense.longlivearea.com