Android 애플리케이션 용 QR 코드를 생성하는 방법은 무엇입니까? [닫은]


92

Android 애플리케이션에서 qrcode를 생성해야하고 Android 앱에서 QR 코드를 생성 할 수있는 라이브러리 또는 소스 코드가 필요합니다.

필요한 라이브러리는 다음과 같아야합니다.

  1. 워터 마크를 남기지 마십시오 (예 : onbarcode라이브러리)
  2. 웹 서비스 API를 사용하여 qrcode를 만들지 마십시오 (Google의 라이브러리 zxing과 같은).
  3. 타사 설치 프로그램 (예 : QR Droid)이 필요하지 않습니다.

이미 iPhone (Objective-C) 용 코드를 만들었지 만 QR 코드 생성기를 직접 만들 시간이 생길 때까지 Android 용 빠른 수정이 필요합니다. 내 첫 번째 안드로이드 프로젝트이므로 어떤 도움을 주시면 감사하겠습니다.


당신은 오픈 소스 zxing 사용할 수 있습니다
nandeesh을

2
zxing 실제로, 아래 참조, 웹 API 아니다
숀 오웬

1
QR 비트 맵 생성을위한 간단한 테스트 앱을 여기에서 사용해보세요. stackoverflow.com/a/30529519/165071
Alexander Farber

답변:


68

ZXING 을 살펴 보셨습니까 ? 바코드를 만드는 데 성공적으로 사용하고 있습니다. 비트 코인 애플리케이션 src 에서 전체 작동 예제를 볼 수 있습니다.

// this is a small sample use of the QRCodeEncoder class from zxing
try {
    // generate a 150x150 QR code
    Bitmap bm = encodeAsBitmap(barcode_content, BarcodeFormat.QR_CODE, 150, 150);

    if(bm != null) {
        image_view.setImageBitmap(bm);
    }
} catch (WriterException e) { //eek }

github에서 비트 코인 오픈 소스를 포크하고 Android 2.2 장치에서 시험을 시도했는데 애플리케이션 강제 종료, 문제가 있습니까?
로이 리

1 년 넘게 그 앱을 보지 못해서 죄송합니다. Sean이 아래에서 언급했듯이 여기에서 zxing 인코더의 소스를 확인하십시오. code.google.com/p/zxing/source/browse/trunk#trunk/core/src/com/…
Rob

@Rob 사용자 정의 번호의 QR 코드를 생성합니까? laphabets 만 숫자 또는 숫자
Erum

@Erum 그것은 당신이 제공하는 대부분의 영숫자 문자열에 대한 바코드를 생성합니다
Rob

구현 '1.9.13을 me.dm7.barcodescanner : : : zxing'이 사용
M. 우스만 칸

97

zxing으로 이것은 QR 생성을위한 내 코드입니다.

 QRCodeWriter writer = new QRCodeWriter();
    try {
        BitMatrix bitMatrix = writer.encode(content, BarcodeFormat.QR_CODE, 512, 512);
        int width = bitMatrix.getWidth();
        int height = bitMatrix.getHeight();
        Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
        for (int x = 0; x < width; x++) {
            for (int y = 0; y < height; y++) {
                bmp.setPixel(x, y, bitMatrix.get(x, y) ? Color.BLACK : Color.WHITE);
            }
        }
        ((ImageView) findViewById(R.id.img_result_qr)).setImageBitmap(bmp);

    } catch (WriterException e) {
        e.printStackTrace();
    }

나를 위해 일했습니다. 간편한 추가.
Roon13

감사합니다. 나를 위해 일하십시오.
RoShan Shan

@Stefano n 번호를 생성 할 수 있습니까? 고유 한 QR 코드?
Ashish Tiwari

매력 g88처럼 작동했습니다 !! +1 여기에 로고를 추가 할 수있는 옵션이 있습니까?
Amit

1
메모리 누수를 방지하려면 에서 생성되는 비트 맵 메모리관리하는 것을 잊지 마십시오 Bitmap.createBitmap.
gMale

43

아마도이 오래된 주제이지만이 라이브러리가 매우 유용하고 사용하기 쉽다는 것을 알았습니다.

QRGen

Android에서 사용하는 예

 Bitmap myBitmap = QRCode.from("www.example.org").bitmap();
ImageView myImage = (ImageView) findViewById(R.id.imageView);
myImage.setImageBitmap(myBitmap);

2
이것은 쉽고 작동하는 솔루션입니다!
Zohab Ali

5
.bitmap ()가 발견되지 않는
마르셀 아델를

Android 종속성을 사용해야하며 다음 implementation 'com.github.kenglxn.QRGen:android:[version]' 과 같이 QRCode 클래스를 가져와야합니다.import net.glxn.qrgen.android.QRCode
anro

2
com.github.kenglxn.QRGen : 해결에 실패 안드로이드 : 2.6.0
M. 우스만 칸

2
프로젝트 build.gradle에서 maven {url " jitpack.io "}를 allprojects.repositiories에 추가하십시오
tagy22

18

다음은 비트 맵을 생성하는 간단하고 작동하는 함수입니다! ZXing1.3.jar 만 사용합니다! 수정 수준도 높음으로 설정했습니다!

추신 : bitMatrix가 x와 y를 반대로하기 때문에 x와 y가 반대로되어 정상입니다. 이 코드는 정사각형 이미지에서 완벽하게 작동합니다.

public static Bitmap generateQrCode(String myCodeText) throws WriterException {
    Hashtable<EncodeHintType, ErrorCorrectionLevel> hintMap = new Hashtable<EncodeHintType, ErrorCorrectionLevel>();
    hintMap.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); // H = 30% damage

    QRCodeWriter qrCodeWriter = new QRCodeWriter();

    int size = 256;

    ByteMatrix bitMatrix = qrCodeWriter.encode(myCodeText,BarcodeFormat.QR_CODE, size, size, hintMap);
    int width = bitMatrix.width();
    Bitmap bmp = Bitmap.createBitmap(width, width, Bitmap.Config.RGB_565);
    for (int x = 0; x < width; x++) {
        for (int y = 0; y < width; y++) {
            bmp.setPixel(y, x, bitMatrix.get(x, y)==0 ? Color.BLACK : Color.WHITE);
        }
    }
    return bmp;
}

편집하다

bitmap.setPixel 대신 픽셀 int 배열과 함께 bitmap.setPixels (...)를 하나씩 사용하는 것이 더 빠릅니다.

        BitMatrix bitMatrix = writer.encode(inputValue, BarcodeFormat.QR_CODE, size, size);
        int width = bitMatrix.getWidth();
        int height = bitMatrix.getHeight();
        int[] pixels = new int[width * height];
        for (int y = 0; y < height; y++) {
            int offset = y * width;
            for (int x = 0; x < width; x++) {
                pixels[offset + x] = bitMatrix.get(x, y) ? BLACK : WHITE;
            }
        }

        bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
        bitmap.setPixels(pixels, 0, width, 0, 0, width, height);

12

나는 zxing-1.3 jar를 사용했고 다른 답변의 코드를 구현하는 몇 가지 변경을해야 했으므로 다른 사람들에게 내 솔루션을 남겨 둘 것입니다. 다음을 수행했습니다.

1) zxing-1.3.jar을 찾아 다운로드하고 속성을 추가합니다 (외부 jar 추가).

2) 내 활동 레이아웃에서 ImageView를 추가하고 이름을 지정합니다 (내 예에서는 tnsd_iv_qr).

3) 내 활동에 qr 이미지를 생성하는 코드를 포함합니다 (이 예에서는 비트 코인 결제를 위해 QR을 생성했습니다).

    QRCodeWriter writer = new QRCodeWriter();
    ImageView tnsd_iv_qr = (ImageView)findViewById(R.id.tnsd_iv_qr);
    try {
        ByteMatrix bitMatrix = writer.encode("bitcoin:"+btc_acc_adress+"?amount="+amountBTC, BarcodeFormat.QR_CODE, 512, 512);
        int width = 512;
        int height = 512;
        Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
        for (int x = 0; x < width; x++) {
            for (int y = 0; y < height; y++) {
                if (bitMatrix.get(x, y)==0)
                    bmp.setPixel(x, y, Color.BLACK);
                else
                    bmp.setPixel(x, y, Color.WHITE);
            }
        }
        tnsd_iv_qr.setImageBitmap(bmp);
    } catch (WriterException e) {
        //Log.e("QR ERROR", ""+e);

    }

누군가 궁금하다면 "btc_acc_adress"변수는 문자열 (BTC 주소 포함)이고 amountBTC는 거래 금액과 함께 두 배입니다.


구현 '1.9.13을 me.dm7.barcodescanner : : : zxing'이 사용
M. 우스만 칸

5

zxing은 웹 API를 제공하지 않습니다 (단지). 실제로 그것은 나중에 프로젝트에서 오픈 소스로 된 소스 코드에서 API를 제공하는 Google입니다.

Rob이 여기에서 말했듯 이 QR 코드 인코더대한 Java 소스 코드 를 사용하여 원시 바코드를 만든 다음 비트 맵으로 렌더링 할 수 있습니다.

여전히 더 쉬운 방법을 제공 할 수 있습니다. Intent로 Barcode Scanner를 호출하여 바코드를 인코딩 할 수 있습니다. .NET Framework에서 몇 줄의 코드와 프로젝트의 두 클래스 만 있으면됩니다 android-integration. 주된 것은 IntentIntegrator 입니다. 전화 만하세요 shareText().


이것은 유용 해 보이지만, 내 앱의 오프라인 모드에서 약간 불편할 수있는 웹 API를 우회하고 싶습니다. 그러나 이것은 매우 유망합니다. 조사해 보겠습니다
Radu

확실하지 나는 분명하지만 난 zxing 옵션 않는다는 것을 말하고 있지 어떤 웹 API를 포함
숀 오웬

아니, 그것은 java.awt의 같은 안드로이드에 unavaile 일부 라이브러리를 사용
siemanko

안녕하세요,이 실을 괴롭 히게해서 죄송 합니다만 여기에서 질문을하시면 더 좋을 것 같습니다. 나는 당신들에 의해 바코드 스캐너 응용 프로그램을 가지고 있습니다 (저는 QR 코드를 스캔하는 데 사용하고 있습니다).이 대답이 맞다면 똑같이 할 수 있고 다른 인수로 의도를 통해 바코드 스캐너를 열 수 있습니다. 디스플레이 용 비트 맵 QR 코드?
Razgriz 2013.02.14

1
@nivwusquorum, 아니요, 인코더는을 사용하지 않거나 java.awt웹에 연결 하지 않으며 인터넷 연결없이 Android의 바코드 스캐너 애플리케이션에서 사용되는 것을 볼 수 있습니다. @Razgriz 아니 그것은 이미지를 반환하지 않지만 화면에 이미지를 표시합니다. 사용자는 이미지를 저장할 수 있습니다.
Sean Owen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.