Мне нужно создать qrcode в моем приложении для Android, и мне нужна библиотека или исходный код, которые позволяют мне создавать QR-код в приложении для Android.
Нужная мне библиотека должна:
- не оставлять водяных знаков (как в
onbarcode
библиотеке) - не использовать API веб-службы для создания qrcode (например, zxing библиотеки Google)
- не нужны сторонние установщики (например, QR Droid)
Я уже создал такой код для iPhone (Objective-C), но мне нужно быстрое исправление для Android, пока у меня не будет времени создать собственный генератор QR-кода. Это мой первый проект для Android, поэтому мы будем благодарны за любую помощь.
Ответы:
Вы смотрели 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 }
источник
с 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(); }
источник
Bitmap.createBitmap
.Возможно, эта старая тема, но я обнаружил, что эта библиотека очень полезна и проста в использовании
QRGen
пример для использования в android
Bitmap myBitmap = QRCode.from("www.example.org").bitmap(); ImageView myImage = (ImageView) findViewById(R.id.imageView); myImage.setImageBitmap(myBitmap);
источник
implementation 'com.github.kenglxn.QRGen:android:[version]'
и импортировать класс QRCode следующим образом:import net.glxn.qrgen.android.QRCode
Вот моя простая и рабочая функция для создания растрового изображения! Я использую только 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);
источник
Я использовал 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 - двойная, с, конечно, суммой транзакции.
источник
zxing не (только) предоставляет веб-API; на самом деле это Google, предоставляющий API из исходного кода, который позже был открыт в проекте.
Как говорит здесь Роб, вы можете использовать исходный код Java для кодировщика QR-кода, чтобы создать необработанный штрих-код, а затем отобразить его как растровое изображение.
Я могу предложить еще более простой способ. Вы можете вызвать сканер штрих-кода по намерению для кодирования штрих-кода. Вам понадобится всего несколько строк кода и два класса из проекта в разделе
android-integration
. Главный из них - IntentIntegrator . Просто позвониshareText()
.источник
java.awt
и не подключается к Интернету, и вы можете увидеть, что он используется в приложении Barcode Scanner - на Android, без подключения к Интернету. @Razgriz нет, он не возвращает изображение, но показывает изображение на экране для вас. Пользователь может сохранить изображение.