二维码的生成与扫描
2018-01-03 09:43
225 查看
二维码:
是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的;
在代码编制上巧妙的利用构成计算机内部逻辑基础的0和1比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图像输入设备或光电扫描设备自动识读以实现信息自动处理;
二维码能够在横向和纵向两个方位同时表达信息,因此能在很小的面积内表达大量的信息;
二维码相对于条形码的优势就是省空间;
zxing简介:
zxing是一个开放源码的,用java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的接口。
zxing可以实现使用手机的内置的摄像头完成条形码和二维码的扫描与解码。
zxing可以实现条形码和二维码的编码与解码。
zxing目前支持的的格式如下:
UPC-A,UPC-E
EAN-8,EAN-13
39码
93码
代码128
QR码
Android上zxing的使用:
这里使用的时候可以有两种形式:
1.将zxing的jar包放到工程的lib库中,然后还要拷贝相应的类源码到工程中去,整个文件夹拷贝过去也是很快的;
2.将已经弄好zxing的工程作为当前工程的依赖库,然后直接使用就可以了;
是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的;
在代码编制上巧妙的利用构成计算机内部逻辑基础的0和1比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图像输入设备或光电扫描设备自动识读以实现信息自动处理;
二维码能够在横向和纵向两个方位同时表达信息,因此能在很小的面积内表达大量的信息;
二维码相对于条形码的优势就是省空间;
zxing简介:
zxing是一个开放源码的,用java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的接口。
zxing可以实现使用手机的内置的摄像头完成条形码和二维码的扫描与解码。
zxing可以实现条形码和二维码的编码与解码。
zxing目前支持的的格式如下:
UPC-A,UPC-E
EAN-8,EAN-13
39码
93码
代码128
QR码
Android上zxing的使用:
这里使用的时候可以有两种形式:
1.将zxing的jar包放到工程的lib库中,然后还要拷贝相应的类源码到工程中去,整个文件夹拷贝过去也是很快的;
2.将已经弄好zxing的工程作为当前工程的依赖库,然后直接使用就可以了;
<Button android:text="默认页面扫描" android:onClick="defaultScan" android:layout_width="match_parent" android:layout_height="wrap_content" /> <Button android:text="选择图片解析" android:onClick="picScan" android:layout_width="match_parent" android:layout_height="wrap_content" /> <Button android:text="生成" android:onClick="shengCheng" android:layout_width="match_parent" android:layout_height="wrap_content" />
public class MainActivity extends AppCompatActivity { private static final int REQUEST_CODE = 1001; private static final int REQUEST_IMAGE = 1002; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } /** * * @param view */ public void defaultScan(View view) { //调用的是zxing自带的扫描页面 Intent intent = new Intent(getApplication(), CaptureActivity.class); startActivityForResult(intent, REQUEST_CODE); } /** * 图片的解析 * @param view */ public void picScan(View view) { Intent intent = new Intent(); intent.setAction(Intent.ACTION_PICK); intent.setType("image/*"); startActivityForResult(intent, REQUEST_IMAGE); } /** * 生成二维码 * @param view */ public void shengCheng(View view) { Intent intent = new Intent(this,ShengChengActivity.class); startActivity(intent); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE) { //处理扫描结果(在界面上显示) if (null != data) { //拿到传递回来的数据 Bundle bundle = data.getExtras(); if (bundle == null) { return; } if (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_SUCCESS) { //解析得到的结果 String result = bundle.getString(CodeUtils.RESULT_STRING); Toast.makeText(this, "解析结果:" + result, Toast.LENGTH_LONG).show(); } else if (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_FAILED) { Toast.makeText(MainActivity.this, "解析二维码失败", Toast.LENGTH_LONG).show(); } } }else if (requestCode == REQUEST_IMAGE){ //取回选中的那种图片uri路径 Uri uri = data.getData(); try { //解析图片的方法...ImageUtil.getImageAbsolutePath(this, uri)通过uri路径得到图片在手机中的绝对路径 CodeUtils.analyzeBitmap(ImageUtil.getImageAbsolutePath(this, uri), new CodeUtils.AnalyzeCallback() { //Bitmap mBitmap 解析的那张图片, String result解析的结果 @Override public void onAnalyzeSuccess(Bitmap mBitmap, String result) { Toast.makeText(MainActivity.this, "解析结果:" + result, Toast.LENGTH_LONG).show(); } @Override public void onAnalyzeFailed() { Toast.makeText(MainActivity.this, "解析二维码失败", Toast.LENGTH_LONG).show(); } }); } catch (Exception e) { e.printStackTrace(); } } a161 } }
生成二维码 public class ShengChengActivity extends AppCompatActivity { private EditText editText; private ImageView imageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sheng_cheng); editText = findViewById(R.id.edit_text_01); imageView = findViewById(R.id.image_view); } /** * 普通的 * @param view */ public void normal(View view) { String s = editText.getText().toString(); if (s==""){ return; } Bitmap bitmap = CodeUtils.createImage(s, 300, 300, null); imageView.setImageBitmap(bitmap); } public void logoQR(View view) { String s = editText.getText().toString(); if (s==""){ return; } //logo Bitmap bitmap = CodeUtils.createImage(s, 300, 300, BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher)); imageView.setImageBitmap(bitmap); } }
在写完上面的代码后还要初始化一下,如果不初始化的话那就使用不了 public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); //初始化zxing库 ZXingLibrary.initDisplayOpinion(this); } } 这就是二维码的初始化
写完二维码还要调用权限 <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.FLASHLIGHT" /> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.INTERNET" />
相关文章推荐
- 二维码的生成和扫描识别
- Android中Zxing二维码的扫描、生成(带有动态权限申请)
- 在线生成二维码~~~方便手机扫描使用~~~
- Android开发扫描和生成二维码功能
- 二维码的生成和扫描
- 生成.扫描,二维码。
- cocos2dx-lua在ios上实现生成及扫描二维码
- iOS 条形码 二维码 的生成 和 扫描 zBarSDK zXing
- iOS之长按识别二维码/生成二维码/扫描二维码
- 二维码开发,扫描,生成
- 实现二维码的扫描和生成
- Zxing扫描和生成二维码+butterknife8.0之后的引用+将drawable文件夹下的图片转换成Drawable
- Android基于Google Zxing实现二维码/条形码扫描、生成二维码/条形码
- 菜鸟成长记-二维码生成、扫描
- Cordova各个插件使用介绍系列(二)—$cordovaBarcodeScanner扫描二维码与生成二维码
- 二维码生成及扫描
- 扫描,生成二维码
- Android实现二维码的生成和扫描
- 手机扫描二维码原理和二维码生成的实现
- 分分钟钟搞定二维码生成以及扫描