본문 바로가기
카테고리 없음

qr코드 만들기 생성법 추가팁

by 카오님4 2024. 8. 2.

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'

qr코드 만들기

 

 

 

요청 페이지 구성

간단하게 요청 링크를 구성해보겠습니다. 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코드에 서버 내부 이미지를 링크로 포함하여 제공하는 예제입니다. :)

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코드의 색상을 변경하거나, 로고를 삽입하는 것도 가능합니다. 이를 통해 더 멋진 QR코드를 만들어보세요!

MatrixToImageConfig customConfig = new MatrixToImageConfig(MatrixToImageConfig.BLACK, MatrixToImageConfig.WHITE);
MatrixToImageWriter.writeToStream(encode, "PNG", outputStream, customConfig);

위 코드는 QR코드의 색상을 커스터마이징하는 예제입니다. 다양한 옵션을 시도해보세요!


이상으로 QR코드 만들기에 대한 포스팅을 마치겠습니다. 유익한 시간이 되셨길 바랍니다! :)

다음에 또 만나요! ^^

 

여름철 실내적정온도 습도 알아보기

여름철 실내적정온도와 습도 관리덥다고 무작정 에어컨과 제습기에 의존하기보다는 적정 온도와 습도를 유지하여 건강한 여름을 보내는 것이 중요합니다.여름철 실내적정온도와 습도1. 적정

sense.longlivearea.com