Як створити QR-код для програми для Android? [зачинено]


92

Мені потрібно створити qrcode у моїй програмі для android, і мені потрібна бібліотека або вихідний код, який дозволяє мені створювати QR-код у програмі для Android.

Бібліотека, яка мені потрібна, повинна:

  1. не залишати водяний знак (як onbarcodeбібліотека)
  2. не використовувати API веб-сервісу для створення qrcode (як бібліотека Google zxing)
  3. не потрібні сторонні інсталятори (наприклад, QR Droid)

Я вже створив такий код для iPhone (Objective-C), але мені потрібно швидке виправлення для Android, поки не встигну зробити власний генератор QR-коду. Це мій перший проект для Android, тому будь-яка допомога буде оцінена.


ви можете скористатися zxing з його відкритим кодом
nandeesh

2
zxing насправді не є веб-API, див. нижче
Шон Оуен,

1
Спробуйте мій простий тестовий додаток для створення QR-зображень тут: stackoverflow.com/a/30529519/165071
Олександр Фарбер,

Відповіді:


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, примусове застосування закрито, щось не так?
Рой Лі,

На жаль, я не дивився на цю програму більше року. Як згадується Шоном нижче, перевірте джерело кодера zxing тут: code.google.com/p/zxing/source/browse/trunk#trunk/core/src/com/…
Роб

@Rob він генерує QR-код, визначений користувачем номера? єдине число або число з лафабетами
Ерум

@Erum він створить штрих-код для будь-якої більшості буквено-цифрових рядків, які ви надаєте
Роб

Використовуйте це: реалізація 'me.dm7.barcodecanner: zxing: 1.9.13'
М. Усман Хан,

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
Це просте і робоче рішення!
Зохаб Алі

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
М. Усман Хан

2
У своєму проекті build.gradle додайте maven {url " jitpack.io "} до allprojects.repositiories
tagy22

18

Ось моя проста і робоча функція для створення растрових зображень! Я використовую лише ZXing1.3.jar! Я також встановив рівень корекції на Високий!

PS: x та y зворотні, це нормально, оскільки bitMatrix повертає 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.setPixels (...) із піксельним масивом int замість bitmap.setPixel по одному:

        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, завантажте його та додайте властивості (додайте зовнішню банку).

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), сума BTC - подвійна, з, звичайно, сумою транзакції.


Використовуйте це: реалізація 'me.dm7.barcodecanner: zxing: 1.9.13'
М. Усман Хан,

5

zxing не надає (лише) веб-API; насправді, це Google надає API із вихідного коду, який згодом був відкритим у проекті.

Як тут говорить Роб, ви можете використовувати вихідний код Java для кодера QR-коду, щоб створити необроблений штрих-код, а потім відтворити його як растрову карту.

Я можу запропонувати більш простий спосіб. Ви можете зателефонувати за допомогою Intent для сканування штрих-коду, щоб закодувати штрих-код. Вам потрібно всього кілька рядків коду та два класи з проекту під android-integration. Основним з них є IntentIntegrator . Просто зателефонуйте shareText().


Танки здається корисним, лише я сподіваюся обійти будь-який веб-API, який може бути трохи незручним, в автономному режимі для мого додатка, але це дуже багатообіцяюче, я розгляну це
Раду

Не впевнений, що мені було ясно, але я кажу, що параметри zxing не передбачають жодних веб-API
Шон Оуен,

Ні, він використовує деякі бібліотеки, недоступні для Android, наприклад java.awt
siemanko

Привіт, вибачте, що некроную цю тему, я думаю, що краще, якщо я просто задаю питання тут. У мене є програма для сканування штрих-коду (я використовую її для сканування QR-коду), і якщо я отримав цю відповідь правильно, я міг би зробити те саме, відкрити сканер штрих-коду за наміром з різними аргументами, і він повернув би Растровий QR-код для відображення?
Razgriz

1
@nivwusquorum, ні, кодер не використовує java.awtабо не підключається до Інтернету, і ви можете бачити, як він використовується в додатку Сканер штрих-коду - на Android, без підключення до Інтернету. @Razgriz ні, це не повертає зображення, а відображає зображення на екрані для вас. Користувач може зберегти зображення.
Шон Оуен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.