当前位置: 首页 > news >正文

条形码和二维码

前言:需要的包的相关文档

1. Barcode:https://pypi.org/project/python-barcode/0.8.1/

2. Qrcode:https://pypi.org/project/qrcode/

3. Zbar: https://pypi.org/project/pyzbar/

4. Opencv: https://docs.opencv.org/3.4.11/

5. OpenCV: https://blog.csdn.net/JsonD/article/details/84983702

本次用python实现条形码和二维码的制作,同时也对最近学习的总价

Barcode库

制作ean13码

导包

import barcode
from barcode.writer import ImageWriter

 这里要注意的是下载的包方式是

pip install python-barcode包

否则from barcode.writer import ImageWriter无法正常使用

指明类型

EAN=barcode.get_barcode_class('ean13')

写入内容

ean = EAN(u'4260165185431',writer=ImageWriter())

保存

ean.save('ean13')

完整代码

import barcode
from barcode.writer import ImageWriter
EAN=barcode.get_barcode_class('ean13')
ean = EAN(u'4260165185431',writer=ImageWriter())
ean.save('ean13')

 code39码制作

方法跟上述的ean13码制作方式类同,只需改变类型指向为code39

完整代码

import barcode
from barcode.writer import ImageWriter
EAN=barcode.get_barcode_class('code39')
ean = EAN(u'4260165185431',writer=ImageWriter())
ean.save('code39')

Numpy库与cv2库 

现在我们提出一个需求就是不借助 Barcode库也能实现,加密ean13码的制作

我们老师的要求是:仅使用opencv库和numpy库,在给定EAN-13码中国家代码、厂商代码、产品代码后,自动生成EAN-13码的数字内容和对应的条码图片。其中设置图片大小为565*400,条形码每个编码单元宽度5像素,短条长度为346像素,长条长度为371像素。

思路:通过枚举的方式制作

#!/usr/bin/env python
# -- coding: utf-8 --
# @Time : 2023/3/12 12:12
# @File : ean-13.py
import cv2
import numpy as npdef generate_ean13_code(country_code, manufacturer_code, product_code):# 计算校验码ean13_code = country_code + manufacturer_code + product_codecheck_code =str((10 - (3*int(ean13_code[0])+int(ean13_code[1])+3*int(ean13_code[2])+int(ean13_code[3])+3*int(ean13_code[4])+int(ean13_code[5])+3*int(ean13_code[6])+int(ean13_code[7])+3*int(ean13_code[8])+int(ean13_code[9])+3*int(ean13_code[10])+int(ean13_code[11])) % 10))ean13_code += check_code# 生成数字内容图像num_image = np.ones((50, 565, 3), dtype=np.uint8) * 255cv2.putText(num_image, ean13_code, (20, 40), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 0), 2, cv2.LINE_AA)# 生成条形码图像code_image = np.ones((346, 565, 3), dtype=np.uint8) * 255# 生成左侧6个数字的条形码for i in range(6):binary_code = '{0:07b}'.format(int(ean13_code[i]))for j, bit in enumerate(binary_code):if bit == '1':cv2.rectangle(code_image, (5+(j+i*7)*5, 0), (5+(j+i*7)*5+5, 346), (0, 0, 0), -1)# 中间加入间隔线cv2.rectangle(code_image, (35*5, 0), (35*5+5, 346), (255, 255, 255), -1)# 生成右侧6个数字的条形码for i in range(6, 12):binary_code = '{0:07b}'.format(int(ean13_code[i]))for j, bit in enumerate(binary_code):if bit == '1':cv2.rectangle(code_image, (40+(j+(i-6)*7)*5, 0), (40+(j+(i-6)*7)*5+5, 346), (0, 0, 0), -1)# 合并数字内容和条形码图像code_image = np.concatenate((code_image,num_image), axis=0)return ean13_code, code_image# 示例调用
code, image = generate_ean13_code('123', '4567', '7654321')
cv2.imshow('EAN-13 Code: {}'.format(code), image)
cv2.waitKey(0)
cv2.imwrite('me.png',image)
cv2.destroyAllWindows()

存在bug,应该是生成130多个小方块。进优势,后面在调试

CV2

这里我们运用到用于计算的numpy库和图片处理的CV2库,numpy库我们之前用过,那么cv2库呢。python版OpenCV常用api调用 (这一版很全)_opencv python api_黑暗骑士V的博客-CSDN博客

知道了使用的方法,我们再做一个案例 

现在这个效果,这个我们就要计算了

import numpy as np
import cv2img=np.zeros((200,400,3),np.uint8)
# 最后以为0 代表的是蓝通道 1代表的是绿通道 2代表红通道
img[0:100,0:200,0]=255
# 第一个参数是高度 第二个是宽度
img[100:200,0:200,1]=255
# 灰
img[0:100,200:400,0]=128
img[0:100,200:400,1]=128
img[0:100,200:400,2]=128img[100:200,200:400,2]=255cv2.imshow('color',img)
cv2.waitKey(0)

 这个img[0:100,0:200,0]==img[高度,宽度,通过值]

0 代表的是蓝通道 1代表的是绿通道 2代表红通道

Qrcode

qrcode库主要是用来做二维码的库,像我以前用Java写一个二维码,要几百行才能实现,这个就几步实现了

 现在给一个需求,我要一个链接到百度的二维码,而且二维码的前景色为蓝色

#!/usr/bin/env python
# -- coding: utf-8 --
# @Time : 2023/3/14 14:30
# @File : Qrcode.py
import qrcode
# 二维码内容
content = 'http://www.baidu.com/'
# 二维码配置
qr3 = qrcode.QRCode(version=10,error_correction=qrcode.constants.ERROR_CORRECT_Q,box_size=5,border=6,
)
# 添加数据
qr3.add_data(content)
# 转存写入
qr3.make(fit=True)
# 图片样式
img3 = qr3.make_image(fill_color="#00BFFF", back_color="#FFFFFF")
# 保存图片
img3.save('qr3.png')

 Zbar库

 这里要注意的zbar库已经弃用了现在用pyzbar库

这是一个解码库,我们解之前bacode库生成的39码内容

#!/usr/bin/env python
# -- coding: utf-8 --
# @Time : 2023/3/14 14:39
# @File : Pyzbar.py
import cv2
from pyzbar import pyzbar
# 读图片
img = cv2.imread('code39.png')
# 解码条码
decoded_objects = pyzbar.decode(img)
# 打印解码结果
for obj in decoded_objects:print('Type:', obj.type)print('Data:', obj.data.decode())

http://www.lryc.cn/news/40081.html

相关文章:

  • 大数据-学习实践-5企业级解决方案
  • 破解吲哚花菁素IR-808 N3,IR-808 azide,IR-808叠氮,酯溶性染料修饰叠氮基团,相关知识
  • 面试官:MQ的好处到底有哪些?
  • 事务机制:Redis能实现ACID属性吗?
  • 如何在 Apinto 实现 HTTP 与 gRPC 的协议转换(上)
  • 3分钟看完-丄-Python自动化测试【项目实战解析】经验分享
  • Web漏洞-命令执行和代码执行漏洞
  • Towards Unsupervised Text Classification Leveraging Experts and Word Embeddings
  • linux进程管理
  • 【深度强化学习】(6) PPO 模型解析,附Pytorch完整代码
  • 【数据结构】第二站:顺序表
  • 嵌入式安防监控项目——实现真实数据的上传
  • SAP 生成UUID
  • DevOPs介绍,这一篇就足够了
  • libcurl库简介
  • Spark SQL支持DataFrame操作的数据源
  • Java【归并排序】算法, 大白话式图文解析(附代码)
  • 【springboot】数据库访问
  • 普通和hive兼容模式下sql的差异
  • github开源自己代码
  • 数据库基础语法
  • 【Java】期末复习知识点总结(4)
  • IDEA好用插件:MybatisX快速生成接口实体类mapper.xml映射文件
  • 【JavaEE】初识线程
  • 智慧水务监控系统-智慧水务信息化平台建设
  • 【Linux】进程优先级前后台理解
  • 时序预测 | MATLAB实现基于EMD-GRU时间序列预测(EMD分解结合GRU门控循环单元)
  • python 模拟鼠标,键盘点击
  • 【CSS】盒子边框 ③ ( 设置表格细线边框 | 合并相邻边框 border-collapse: collapse; )
  • TensorRT量化工具pytorch_quantization代码解析(一)