zxing 라이브러리로 QR코드 생성
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 |
댓글
이 글 공유하기
다른 글
-
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