AndroidアプリケーションのQRコードを生成するにはどうすればよいですか?[閉まっている]


92

Androidアプリケーションでqrcodeを作成する必要があり、AndroidアプリでQRコードを作成できるライブラリまたはソースコードが必要です。

必要なライブラリは次のとおりです。

  1. 透かしを残さない(onbarcodeライブラリのように)
  2. qrcodeの作成にWebサービスAPIを使用しない(Googleのライブラリzxingなど)
  3. サードパーティのインストーラー(QR Droidなど)は必要ありません

私はすでにiPhone用にそのようなコード(Objective-C)を作成しましたが、独自のQRコードジェネレーターを作成する時間があるまで、Android用のクイックフィックスが必要です。これは私の最初のAndroidプロジェクトなので、どんな助けでもありがたいです。


オープンソースのzxingを使用できます
nandeesh 2012年

2
zxingはWebAPIではありません。実際には以下を参照してください
Sean Owen

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年以上見ていません。ショーンによって後述するように、ここでzxingエンコーダのソースをチェックアウト:code.google.com/p/zxing/source/browse/trunk#trunk/core/src/com/...
ロブ

@Robユーザー定義番号のQRコードを生成しますか?laphabetsを有する唯一の数や数
Erum

@Erumは、提供するほとんどの英数字文字列のバーコードを作成します
Rob

これを使用してください:実装 'me.dm7.barcodescanner:zxing:1.9.13'
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 2016年

ありがとうございます。私のために働く。
RoShan Shan 2017

@Stefanoそれはnを生成できますか?ユニークなQRコードの?
Ashish Tiwari 2017

チャームg88のように働いた!! +1これにロゴを追加できるオプションはありますか?
2017年

1
メモリリークを回避するために、によって作成されているビットマップメモリ管理することを忘れないでくださいBitmap.createBitmap
gMale 2018

43

たぶんこの古いトピックですが、このライブラリは非常に便利で使いやすいことがわかりました

QRGen

Androidで使用する例

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

2
これは簡単で実用的なソリューションです!
Zohab Ali 2018

5
.bitmapは、()が見つかりません
マルセルアデルを

androidの依存関係を使用する必要があります: implementation 'com.github.kenglxn.QRGen:android:[version]' そして次のようにQRCodeクラスをインポートします:import net.glxn.qrgen.android.QRCode
anro

2
解決に失敗しました:com.github.kenglxn.QRGen:android:2.6.0
M.

2
あなたのプロジェクトでMavenの{URL "を追加build.gradle jitpack.ioをallprojects.repositioriesに"}
tagy22

18

これがビットマップを生成するための私のシンプルで機能する関数です!私はZXing1.3.jarのみを使用しています!また、修正レベルを高に設定しました。

PS: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;
}

編集

ビットマップ.setPixelの代わりにピクセルint配列でbitmap.setPixels(...)を1つずつ使用する方が高速です。

        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.3jarを使用し、他の回答からコードを実装するためにいくつかの変更を加える必要があったので、他の人にソリューションを任せます。私は次のことをしました:

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はdoubleであり、もちろんトランザクション量も含まれます。


これを使用してください:実装 'me.dm7.barcodescanner:zxing:1.9.13'
M.

5

zxingは(のみ)WebAPIを提供しません。実際、それは、後でプロジェクトでオープンソース化されたソースコードからAPIを提供するGoogleです。

Robがここで述べているように、QRコードエンコーダーJavaソースコードを使用して生のバーコードを作成し、それをビットマップとしてレンダリングできます。

私はまだもっと簡単な方法を提供することができます。バーコードスキャナーをインテントで呼び出して、バーコードをエンコードできます。必要なのは、数行のコードと、プロジェクトの2つのクラスandroid-integrationです。主なものはIntentIntegratorです。ただ電話してくださいshareText()


タンクこれは便利なようです。私のアプリのオフラインモードでは、少し不快かもしれないWeb APIをバイパスしたいだけですが、これは非常に有望です。調査します
Radu

はっきりしていませが、zxingオプションにはWeb APIが含まれていないと言っています
Sean Owen

いいえ、java.awtのようにAndroidでは利用できないいくつかのライブラリを使用します
siemanko 2013年

こんにちは、このスレッドを壊して申し訳ありません。ここで質問した方がいいと思います。私はあなたたちによるバーコードスキャナーアプリケーションを持っています(私はQRコードをスキャンするためにそれを使用しています)そして私がこの答えを正しく得たなら、私は同じことをすることができます、異なる引数でインテントを介してバーコードスキャナーを開くとそれは表示用のビットマップQRコード?
Razgriz 2013

1
@nivwusquorum、いいえ、エンコーダーはjava.awtWebを使用しないか、Webに接続しません。また、インターネットに接続していなくても、AndroidのBarcodeScannerアプリケーションで使用されていることがわかります。@Razgrizいいえ、画像は返されませんが、画面に画像が表示されます。ユーザーは画像を保存できます。
ショーンオーウェン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.