条形码和二维码

news/2024/11/22 13:02:15/

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

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.ppmy.cn/news/664987.html

相关文章

条形码(Bar Code)概述

条形码的产生 社会的发展产生新的需求,于是新的技术应运而生。条形码也不例外。 想像一下,在超市结账的时候,你推着一车子的东西,柜台服务员一个商品接一个商品的手动计算你的购买总金额,这会是一个多么恐怖的场景。…

各国条形码编码规则

http://wenku.baidu.com/link?urlMgGPWM93ovV0LGATSfKpPvxmwLyi26lmOqHn_4EKnLV5zFA8Gj74N0N6yJM9ZIeyBUJaC6tRtr-y1eLuqH275AcO-cwrzaDaKVYUPUdtTSi 大家购买商品时可根据条形码前几位判断这是哪个国家的产品,不用听导购小姐一边胡侃,毕竟印在包装上的…

iOS设置和获取条形码

// // Copyright © 2016年 hjl. All rights reserved. //#import "HHBarcodeViewController.h" #import <AVFoundation/AVFoundation.h> interface HHBarcodeViewController ()/** 会话 */ property (nonatomic, strong) AVCaptureSession *session;//* …

条码编码方式-----Code 39与code 128条形码的区别

CODE 39码的编码规则是&#xff1a; 1、 每五条线表示一个字符&#xff1b; 2、 粗线表示&#xff11;&#xff0c;细线表示&#xff10;&#xff1b; 3、 线条间的间隙宽的表示&#xff11;&#xff0c;窄的表示&#xff10;&#xff1b; 4、 五条线加上它们之间的四条…

条形码的编码规则

原文&#xff1a;https://zm10.sm-tc.cn/?srcl4uLj4zF0NCIiIjRnJGdk5CYjNGckJLQjYqWkZiG0J6Ni5ack5qM0MrHy8zPysrRl4uSkw%3D%3D&uid675748e805f2607e9db54032b5c3a4e9&hidddb8b7f221084bb37c8e6866997e39cd&pos8&cid9&time1557289152849&fromclick&am…

条形码生成器

<!doctype html> <html> <head> <meta charset"utf-8"> <title>条形码生成器by逊王之王</title> <style type"text/css"> .barcode { float: left; clear: both; …

生成条形码代码

//该段代码为 生成条形码代码 //生成效果 using System;using System.Collections.Generic;using System.Text;using System.Drawing;namespace Paabo.WordProcessing.Common{ public class BarCodeProvider { #region 单例 private static BarCodeProvide…

识别条形码

问题描述 计算机学院2013级的院草语文难同学是软院院花牟黑黑爱慕的对象&#xff0c;因此牟黑黑经常约楠神去逛街&#xff0c;楠神不喜欢陪牟黑黑逛街&#xff0c;但是不得不从啊。所以在牟黑黑逛街的时候他就无聊的用眼睛识别条形码 。 在生活中&#xff0c;条形码经常用来标志…