现在有很多精修的第三方的zxing,本次试用的是慕课网的libzxing,然后自己又添加了条形码的生成的内容。

/*** 条形码*/
public class Ecoad {private int width;private int height;public Ecoad(int width,int height){this.width=width;this.height=height;}//绘制条形码public Bitmap bitmap1(String ss) throws Exception{//条形码CODE_128BarcodeFormat fomt=BarcodeFormat.CODE_128;BitMatrix matrix=new MultiFormatWriter().encode(ss, fomt, width, height);int width=matrix.getWidth();int height=matrix.getHeight();int[] pixel=new int[width*height];for(int i=0;i<height;i++){for(int j=0;j<width;j++){if(matrix.get(j,i))pixel[i*width+j]=0xff000000;}}Bitmap bmapp=Bitmap.createBitmap(width,height,Bitmap.Config.ARGB_8888);bmapp.setPixels(pixel, 0, width, 0, 0, width, height);return bmapp;}
}
zxing里的一个类
/*** 二维码生成工具类*/
public class EncodingUtils {/*** 创建二维码** @param content   content* @param widthPix  widthPix* @param heightPix heightPix* @param logoBm    logoBm* @return 二维码*/public static Bitmap createQRCode(String content, int widthPix, int heightPix, Bitmap logoBm) {try {if (content == null || "".equals(content)) {return null;}// 配置参数Map<EncodeHintType, Object> hints = new HashMap<>();hints.put(EncodeHintType.CHARACTER_SET, "utf-8");// 容错级别hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);// 图像数据转换,使用了矩阵转换BitMatrix bitMatrix = new QRCodeWriter().encode(content, BarcodeFormat.QR_CODE, widthPix,heightPix, hints);int[] pixels = new int[widthPix * heightPix];// 下面这里按照二维码的算法,逐个生成二维码的图片,// 两个for循环是图片横列扫描的结果for (int y = 0; y < heightPix; y++) {for (int x = 0; x < widthPix; x++) {if (bitMatrix.get(x, y)) {pixels[y * widthPix + x] = 0xff000000;} else {pixels[y * widthPix + x] = 0xffffffff;}}}// 生成二维码图片的格式,使用ARGB_8888Bitmap bitmap = Bitmap.createBitmap(widthPix, heightPix, Bitmap.Config.ARGB_8888);bitmap.setPixels(pixels, 0, widthPix, 0, 0, widthPix, heightPix);if (logoBm != null) {bitmap = addLogo(bitmap, logoBm);}//必须使用compress方法将bitmap保存到文件中再进行读取。直接返回的bitmap是没有任何压缩的,内存消耗巨大!return bitmap;} catch (WriterException e) {e.printStackTrace();}return null;}/*** 在二维码中间添加Logo图案*/private static Bitmap addLogo(Bitmap src, Bitmap logo) {if (src == null) {return null;}if (logo == null) {return src;}//获取图片的宽高int srcWidth = src.getWidth();int srcHeight = src.getHeight();int logoWidth = logo.getWidth();int logoHeight = logo.getHeight();if (srcWidth == 0 || srcHeight == 0) {return null;}if (logoWidth == 0 || logoHeight == 0) {return src;}//logo大小为二维码整体大小的1/5float scaleFactor = srcWidth * 1.0f / 5 / logoWidth;Bitmap bitmap = Bitmap.createBitmap(srcWidth, srcHeight, Bitmap.Config.ARGB_8888);try {Canvas canvas = new Canvas(bitmap);canvas.drawBitmap(src, 0, 0, null);canvas.scale(scaleFactor, scaleFactor, srcWidth / 2, srcHeight / 2);canvas.drawBitmap(logo, (srcWidth - logoWidth) / 2, (srcHeight - logoHeight) / 2, null);canvas.save(Canvas.ALL_SAVE_FLAG);canvas.restore();} catch (Exception e) {bitmap = null;e.getStackTrace();}return bitmap;}
}
public class MainActivity extends AppCompatActivity {private Button scan_Btn;private TextView result_TexView;private EditText input_EditText;private ImageView image;private CheckBox check_Logo;private TextView show_text;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);scan_Btn = (Button)findViewById(R.id.scan_btn);result_TexView = (TextView)findViewById(R.id.scan_result);input_EditText = (EditText)findViewById(R.id.make_edit) ;image = (ImageView)findViewById(R.id.image_set) ;check_Logo = (CheckBox)findViewById(R.id.check_logo);show_text = (TextView)findViewById(R.id.show_text);scan_Btn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {startActivityForResult(newIntent(MainActivity.this, CaptureActivity.class),0);}});}/*** 生成条形码* @param view*/public void make_txm(View view){String input = input_EditText.getText().toString();if(input.equals("")){Toast.makeText(MainActivity.this, "输入的内容为空,请重新输入", Toast.LENGTH_SHORT).show();}else if (isAllDig(input)){Toast.makeText(MainActivity.this, "输入的内容不能包括中文,请重新输入", Toast.LENGTH_SHORT).show();}else{Ecoad ecoad = new Ecoad(700, 500);try {Bitmap bitmap = ecoad.bitmap1(input);image.setImageBitmap(bitmap);show_text.setText(input);show_text.setVisibility(View.VISIBLE);} catch (Exception e) {e.printStackTrace();}}}public boolean isAllDig(String input){for (int i=0;i<input.length();i++){int c = input.charAt(i);if(c>19968 && c<40623){   //中文范围return true;}}return  false;}public void make_btn(View view){String input = input_EditText.getText().toString();if(input.equals("")){Toast.makeText(MainActivity.this, "输入为空,请重新输入", Toast.LENGTH_SHORT).show();}else{Bitmap bitmap = EncodingUtils.createQRCode(input,700,700,check_Logo.isChecked()? BitmapFactory.decodeResource(getResources(),R.drawable.myshow):null);show_text.setVisibility(View.INVISIBLE);image.setImageBitmap(bitmap);}}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if(resultCode==RESULT_OK){Bundle bundle = data.getExtras();final String result = bundle.getString("result");//CaptureActivity中的key为“result”result_TexView.setText(result);//如果扫描的为一个网址,那么则访问if(result.startsWith("http://")){AlertDialog.Builder dialog = new AlertDialog.Builder(this);dialog.setTitle("扫描结果如下,是否访问该网址?");dialog.setMessage(result);dialog.setNegativeButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// 用默认浏览器打开扫描得到的地址Intent intent = new Intent();intent.setAction("android.intent.action.VIEW");Uri content_url = Uri.parse(result);intent.setData(content_url);startActivity(intent);finish();}});dialog.setPositiveButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {
//                        finish();}});dialog.create().show();}}}}

效果如下:




二维码和条形码简单实现相关推荐

  1. 使用c#捕获usb扫描枪扫描二维码、条形码结果(支持中文版)

    之前在18年写过一个使用c#捕获usb扫描枪扫描二维码.条形码结果,当时我是没有遇到需要使用中文的情况,因为二维码都是我自己控制生成的,如果遇到中文,我会提前进行编码编程unicode编码,所以,没有 ...

  2. ZXing 相册中识别二维码和条形码(直接引用就可以了)

    *百度了很久一直没有找到关于相册获取条形码的Demo,真心是醉了,只能苦逼的去自己看 闲话不说直接搞起 分析: *核心 1,通过路径转换成bitmp对象 2,再bitmap对象转换成二进制图片(二值化 ...

  3. 使用c#捕获usb扫描枪扫描二维码、条形码结果

    关于扫描枪对包含中文的二维码扫描的处理,请参考使用c#捕获usb扫描枪扫描二维码.条形码结果(支持中文版),本文之后的评论不再回复关于中文扫码的问题 另外,请仔细阅读本文,因为中文支持博文仅修改了本文 ...

  4. Python解析二维码、条形码

    Python解析二维码.条形码 1 前言 2 二维码知识小科普 2.1 什么是二维码 2.2 二维码的结构 2.3 二维码的绘制过程 3 Python解析二维码 3.1 准备工作: 3.2 pyzba ...

  5. 二维码及条形码智能检测软件(Python+YOLOv5深度学习模型+清新界面)

    摘要:二维码及条形码智能检测软件用于检测常用条形码和二维码,对其位置进行精确定位.记录并显示检测结果,辅助识别算法定位条形码或二维码.本文详细介绍二维码及条形码智能检测软件,在介绍算法原理的同时,给出 ...

  6. OpenCV(项目)二维码识别(二维码、条形码)

    目录 过程 1.获取图片中的二维码信息 2.获取视频中的二维码信息 3.检测出二维码框 4.显示数据 5.添加数据,判断二维码是否授权 5-1:.添加数据 5-2.读取文件信息,放入数组 5-3.判断 ...

  7. 【opencv有趣应用】二维码和条形码的检测

    今天学习下使用opencv进行条形码和二维码的检测 import cv2 import numpy as np from pyzbar.pyzbar import decodedef cv_show_ ...

  8. Vue 移动端实现调用相机扫描二维码或条形码

    一.开发前的准备 实现二维码或条形码的扫描识别比较普遍的做法是去调用微信 JS-SDK 的扫一扫功能(详见 概述 | 微信开放文档),或者支付宝 H5 开放的API(详见?支付宝H5开放文档). 但是 ...

  9. 关于Zbar和ZXing这两个无比强大的二维码和条形码识别工具

    之前做了一些关于一维码二维码识别与生成的工作.在这里总结一下子. 显然做这个我们不会花大量力气去自己来写这个识别过程, 这之间可能会包括人工识别方面的工作, 所以为了偷懒,便想到了去网上找这样的开源工 ...

最新文章

  1. 英国JIC院士组3.8万英镑招博后-植物代谢物与微生物组-截止6月27日
  2. typescript索引类型_TypeScript类型声明书写详解
  3. DOM4J_Xpath的XML操作总结
  4. 【网络基础】02、IP地址
  5. ef mysql 时间_关于c#:EF6和MySQL时区支持
  6. python django ansible自动化运维管理平台源码收藏
  7. 地址总线是单向还是双向_三端双向交流开关(TRIAC)
  8. Android深入浅出系列之实例应用—弹出消息Toast对象的使用自定义方式(二)
  9. [ARM] [linux master] 调试技术001 GDB-Advanced-001 Code Dump 的调试
  10. 【绪论】——声呐概述
  11. Network-Monitor项目中观察者模式解析
  12. Prometheus is an open source monitoring
  13. 台式计算机内存是什么问题,台式电脑提示内存不足怎么回事
  14. WebService高级,可靠消息
  15. ASP.net防止SQL注入方法
  16. 数独1--暴力回溯法(时间超)
  17. Windows 98 SE
  18. word中插入分割线
  19. (ZT)中国姓氏韦氏拼音拼法
  20. java公众号第三方开发平台_微信开放平台之公众号第三方平台开发及全网发布验证...

热门文章

  1. AD21覆铜,包地,补泪滴,有图
  2. 如何用日志记录VSS中的用户修改行为
  3. Mbps、Kbps、bps、MB、KB、B、b的区别
  4. tmall.item.add.simpleschema.get( 天猫发布商品规则获取 )
  5. IMP-00008错误
  6. 有趣的HTML实例(七) 注册登录界面Ⅱ(css+js)
  7. 线性代数学习笔记4-1:线性方程组的数学和几何意义、零空间/解空间/核
  8. 4T移动硬盘 分区_手机连接移动硬盘教程
  9. IPA转APP的方法和APP转IPA的方法
  10. 基于C++的Qt(三)Qt类库概述