안드로이드에서 Zxing 라이브러리를 이용한 바코드 이미지 생성

바코드 관련해서는 Zxing 라이브러리를 많이 이용한다.

안드로이드 앱내에서 사용예로는 보통 Read에 대한 부분이 많은데, 바코드 이미지를 생성이 간간히 필요할때가 있다.

이에 참고할 항목만  정리한다.

1. Zxing 라이브러리 구하기

프로젝트 사이트인 http://github.com/zxing/zxing 에서는 소스를 제공한다.
소스를 받아서 자체 사용할 항목들을 추려서 라이브러리 jar파일을 만들 수도 있다.
예전 2.3.0 버전대까지는 ant 빌드가 가능했던 것으로 기억하는데, 현재는 maven 빌드만 제공한다. (build.xml 없음)
빌드하는 방법에 대해서는 해당 프로젝트의 wiki사이트(https://github.com/zxing/zxing/wiki/Getting-Started-Developing)에서 찾을 수 있다.

만약 필요한 내용이 core에만 한정되었다면, 미리 빌드된 것을 사용할 수 있다.
http://repo1.maven.org/maven2/com/google/zxing/core/ 에서 적절한 버전(가능하면 최신)의 jar파일을 받아도 무방하다.

참고로 프로젝트 사이트에서 javadoc 문서등을 볼 수 있으니, wiki페이지와 http://zxing.github.io/zxing/ 에서 필요한 정보를 찾아보는것도 좋을듯 하다.

2. 바코드 이미지 생성

Zxing 라이브러리가 바코드 생성/인식으로 여러 기능들을 지원하긴 하나 여기서는 단순히 바코드 이미지 생성에 대해서만 다룬다.
Zxing 라이브러리가 3.1.0 버전 기준으로 지원하는 바코드 포맷은 다음과 같다.

1D product 1D industrial 2D
UPC-A Code 39 QR Code
UPC-E Code 93 Data Matrix
EAN-8 Code 128 Aztec (beta)
EAN-13 Codabar PDF 417 (beta)
ITF
RSS-14
RSS-Expanded

 

아래의 사이트 내용을 우선 참고한다.(질문에 첫번째 답글)

http://stackoverflow.com/questions/10353392/generate-barcode-image-in-android-application

스택오버플로에서 올라온 답글 중에 중요한 부분을 정리하면 다음과 같다.


private static final int WHITE = 0xFFFFFFFF;
private static final int BLACK = 0xFF000000;

public Bitmap barcodeImageCreate(String contents, BarcodeFormat format, imgWidth, mImgHeight)

  // ..code 중략....//
  MultiFormatWriter writer = new MultiFormatWriter();
  BitMatrix bitMatricx;
  try {
      bitMatrix = writer.encode(contents, format, mImgWidth, mImgHeight);
      return makeBitmap(bitMatrix);
  } catch (IllegalArgumentException iae) {
      // Unsupported format
      return null;
  }
}

public static Bitmap makeBitmap(BitMatrix matrix ) {
  int width = matrix.getWidth();
  int height = matrix.getHeight();
  Bitmap image = Bitmap.createBitmap(width, height, Config.ARGB_8888);
  int x, y;

  for (x = 0; x < width; x++) {
    for (y = 0; y < height; y++) {
       image.setPixel(x, y, matrix.get(x, y) ? BLACK : WHITE);
    }
  }
  return image;
}

MultiFormatWriter 클래스는 여러 포맷의 바코드 이미지를 생성할때에 사용한다.
실제 encode() method를 호출할때에 포맷정보를 보고 분기하기 때문에 특정 바코드 포맷만 사용한다면 바로 해당 포맷에 맞는걸 찾아서 쓰는게 더 나을 수 있다.
바코드 포맷은 BarcodeFormat 클래스에 정의된 내용을 참고한다. (BarcodeFormat.CODE_128 형태로 지정해서 사용함)
생성된 결과는 Zxing에서 정의된 BitMatrix 형식으로 지정이 되는데, 이 안에 배열정보가 비트맵 이미지 데이터를 가지고 있다.
따라서 배열 정보를 가지고 실제 비트맵 객체를 만들고 그 후에 각 픽셀에 흑,백 여부만 지정하면 된다.

대략 이런 정도 형태로 비트맵 이미지를 얻어 올 수 있다.

3. 그외 나머지

core에는 바코드 이미지 생성외에 다른 기능들도 있으니, 필요한 사항은 javadoc문서를 참고하길.

* 바코드 이미지를 가지고 오는 부분에서 시간이 걸릴 수 있기 때문에 별도의 thread로 돌리는게 나을 수 있다. (진행했던 프로젝트에서는 thread로 돌려서 결과를 받도록 처리함)

댓글 남기기

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.