이 영역을 누르면 첫 페이지로 이동
CodeJUN 블로그의 첫 페이지로 이동

CodeJUN

페이지 맨 위로 올라가기

CodeJUN

심심해서 하는 블로그

zxing 라이브러리로 QR코드 생성

  • 2019.11.07 21:07
  • Android

zxing은 바코드나 QR코드 리더기를 제작하는 데 있어서 거의 필수적인 라이브러리라고 볼 수 있다. 이를 활용한 수많은 라이브러리 들 중에서도, 리딩 가능과 바코드 제작 기능이 둘 다 같이 있는 라이브러리는 찾기 힘들었다. (정보력이 상당히 딸리는 듯..)

QR코드 제작 라이브러리를 또 import 하자니, zxing라이브러리를 같이 쓰는 놈이라 또 충돌이 난다. 한참을 생각하다, zxing에 있는 기본 Encoder를 이용해 한 번 만들어 볼까 라는 생각을 하게 되었다. (어떤 라이브러리를 사용하던 zxing을 사용하면 가능할 듯!)

 

기본 원리

일단, 제작하고자 하는 값을 입력받고, 이 값을 원하는 바코드로 Encoding 해야 한다. 예를 들면 QR코드나 Barcode 중에서도 뭐 여러 가지가 있겠다. 아무튼, 이 값을 Encoding 하고, Bitmap으로 변환하여 이미지 파일로 만들어 내는 것이다.

 

어떤 함수가 사용되는가 하면

내가 사용했던 라이브러리는 Bitmap이 아니라 BitMatrix로 인코딩 되어 값을 반환해 주었기에, 바로 imageView에 넣을 수 없었다. 그래서 인터넷을 뒤져보던 중 Bitmap으로 변환해 주는 클래스를 찾을 수 있었다. 해당 클래스에서는 값을 MultiFormatWriter라는 함수를 사용해 변환 후 값을 반환하고 있었다. zxing 라이브러리 안에 포함되어 있는 함수이므로, 대부분의 오픈소스 라이브러리에서도 해당 코드가 작동할 가능성이 높다.

 

사용해 보자

일단 전체적인 소스코드는 아래와 같다.

public class QRCodeUtil {

    private QRCodeUtil() {}

    public static Bitmap encodeAsBitmap(String source, int width, int height) {
        BitMatrix result;

        try {
            result = new MultiFormatWriter().encode(source, BarcodeFormat.QR_CODE, width, height, null);
        } catch (IllegalArgumentException | WriterException e) {
            //지원하지 않는 포멧
            return null;
        }

        final int w = result.getWidth();
        final int h = result.getHeight();
        final int[] pixels = new int[w * h];

        for (int y = 0; y < h; y++) {
            final int offset = y * w;
            for (int x = 0; x < w; x++) {
                pixels[offset + x] = result.get(x, y) ? Color.BLACK : Color.WHITE;
            }
        }

        final Bitmap bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
        bitmap.setPixels(pixels, 0, width, 0, 0, w, h);

        return bitmap;
    }
}

 

이제 실전에서 직접 사용하려면, 아래와 같이 사용하면 된다.

Bitmap bitmap = QRCodeUtil.encodeAsBitmap("input your custom value", 500, 500); //입력값 받아와서 파라미터로 전달합니다. 인수: 값, 가로, 세로
                    qrImageView.setImageBitmap(bitmap); //변환 후 반환된 비트맵 이미지 지정

간단하다.

 


참고 자료: https://gist.github.com/adrianoluis/fa9374d7f2f8ca1115b00cc83cd7aacd

 

Simple utility class to create QR Code as Bitmap on Android using ZXing library

Simple utility class to create QR Code as Bitmap on Android using ZXing library - QRCodeUtil.java

gist.github.com

 

저작자표시 비영리 동일조건 (새창열림)

'Android' 카테고리의 다른 글

DataBinding 오류 해결  (0) 2020.02.01
[MAC] ADB PATH 설정하기  (0) 2020.01.30
Lottie 를 이용해 화려한 애니메이션 넣기  (0) 2019.09.20
RecyclerView 에서 Divider (구분선) 추가하기  (0) 2019.08.24
Preference View(설정창 구현하기)  (0) 2019.07.18

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • DataBinding 오류 해결

    DataBinding 오류 해결

    2020.02.01
  • [MAC] ADB PATH 설정하기

    [MAC] ADB PATH 설정하기

    2020.01.30
  • Lottie 를 이용해 화려한 애니메이션 넣기

    Lottie 를 이용해 화려한 애니메이션 넣기

    2019.09.20
  • RecyclerView 에서 Divider (구분선) 추가하기

    RecyclerView 에서 Divider (구분선) 추가하기

    2019.08.24
다른 글 더 둘러보기

정보

CodeJUN 블로그의 첫 페이지로 이동

CodeJUN

  • CodeJUN의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 방명록

카테고리

  • 분류 전체보기 (54)
    • Android (38)
    • BlockChain (4)
    • React Native (4)
    • 아두이노 (2)
    • 프로젝트 (6)

공지사항

  • 공지 - 블로그를 시작하며

태그

  • 강좌
  • arduino
  • C
  • Android
  • 안드로이드
  • 아두이노
  • Firebase
  • c++

나의 외부 링크

  • Github

정보

CODE_JUN의 CodeJUN

CodeJUN

CODE_JUN

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © CODE_JUN. Designed by Fraccino.

티스토리툴바