Saya perlu membuat kode QR di aplikasi Android saya, dan saya memerlukan perpustakaan atau kode sumber yang memungkinkan saya membuat Kode QR di aplikasi Android.
Perpustakaan yang saya butuhkan harus:
- tidak meninggalkan tanda air (seperti
onbarcode
perpustakaan) - tidak menggunakan API layanan web untuk membuat kode QR (seperti perpustakaan Google zxing)
- tidak perlu pemasang pihak ketiga (seperti QR Droid)
Saya sudah membuat kode seperti itu untuk iPhone (Objective-C) tetapi saya perlu perbaikan cepat untuk Android sampai saya punya waktu untuk membuat generator QR Code sendiri. Ini adalah proyek android pertama saya sehingga bantuan apa pun akan dihargai.
Jawaban:
Sudahkah Anda melihat ke ZXING ? Saya telah berhasil menggunakannya untuk membuat kode batang. Anda dapat melihat contoh kerja lengkap di src aplikasi bitcoin
// 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 }
sumber
dengan zxing ini adalah kode saya untuk membuat 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(); }
sumber
Bitmap.createBitmap
.Mungkin topik lama ini tetapi menurut saya perpustakaan ini sangat membantu dan mudah digunakan
QRGen
contoh untuk menggunakannya di android
Bitmap myBitmap = QRCode.from("www.example.org").bitmap(); ImageView myImage = (ImageView) findViewById(R.id.imageView); myImage.setImageBitmap(myBitmap);
sumber
implementation 'com.github.kenglxn.QRGen:android:[version]'
dan mengimpor kelas QRCode seperti ini:import net.glxn.qrgen.android.QRCode
Ini adalah fungsi sederhana dan berfungsi saya untuk menghasilkan Bitmap! Saya Menggunakan ZXing1.3.jar saja! Saya juga menyetel Tingkat Koreksi ke Tinggi!
PS: x dan y terbalik, itu normal, karena bitMatrix membalikkan x dan y. Kode ini berfungsi sempurna dengan gambar persegi.
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; }
EDIT
Lebih cepat menggunakan bitmap.setPixels (...) dengan larik int piksel daripada bitmap.setPixel satu per satu:
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);
sumber
Saya menggunakan jar zxing-1.3 dan saya harus membuat beberapa perubahan menerapkan kode dari jawaban lain, jadi saya akan meninggalkan solusi saya untuk orang lain. Saya melakukan hal berikut:
1) temukan zxing-1.3.jar, unduh dan tambahkan properti (tambahkan jar eksternal).
2) dalam layout aktivitas saya tambahkan ImageView dan beri nama (dalam contoh saya itu tnsd_iv_qr).
3) sertakan kode dalam aktivitas saya untuk membuat gambar qr (dalam contoh ini saya membuat QR untuk pembayaran bitcoin):
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); }
Jika seseorang bertanya-tanya, variabel "btc_acc_adress" adalah String (dengan alamat BTC), jumlahBTC adalah ganda, dengan, tentu saja, jumlah transaksi.
sumber
zxing tidak (hanya) menyediakan API web; sungguh, Google menyediakan API, dari kode sumber yang kemudian menjadi sumber terbuka dalam proyek tersebut.
Seperti yang dikatakan Rob di sini Anda dapat menggunakan kode sumber Java untuk pembuat kode QR untuk membuat kode batang mentah dan kemudian merendernya sebagai Bitmap.
Saya masih bisa menawarkan cara yang lebih mudah. Anda dapat memanggil Pemindai Kode Batang dengan Maksud untuk menyandikan kode batang. Anda hanya perlu beberapa baris kode, dan dua kelas dari proyek, di bawah
android-integration
. Yang utama adalah IntentIntegrator . Telepon sajashareText()
.sumber
java.awt
, atau terhubung ke web, dan Anda dapat melihatnya digunakan di aplikasi Pemindai Kode Batang - di Android, tanpa koneksi internet. @Razgriz no itu tidak mengembalikan gambar, tetapi menunjukkan gambar di layar untuk Anda. Pengguna dapat menyimpan gambar tersebut.