python barcode大小_python二维条形码生成

本文介绍了如何使用Python生成二维条形码,包括从字符串转换为条形码编码,以及创建条形码图像的方法。代码示例中展示了如何生成特定字符串的条形码图像,并提供了自定义标签的功能。
摘要由CSDN通过智能技术生成

import re, Image, ImageDraw

code_img_data=['11011001100','11001101100','11001100110',

'10010011000','10010001100','10001001100',

'10011001000','10011000100','10001100100',

'11001001000','11001000100','11000100100',

'10110011100','10011011100','10011001110',

'10111001100','10011101100','10011100110',

'11001110010','11001011100','11001001110',

'11011100100','11001110100','11101101110',

'11101001100','11100101100','11100100110',

'11101100100','11100110100','11100110010',

'11011011000','11011000110','11000110110',

'10100011000','10001011000','10001000110',

'10110001000','10001101000','10001100010',

'11010001000','11000101000','11000100010',

'10110111000','10110001110','10001101110',

'10111011000','10111000110','10001110110',

'11101110110','11010001110','11000101110',

'11011101000','11011100010','11011101110',

'11101011000','11101000110','11100010110',

'11101101000','11101100010','11100011010',

'11101111010','11001000010','11110001010',

'10100110000','10100001100','10010110000',

'10010000110','10000101100','10000100110',

'10110010000','10110000100','10011010000',

'10011000010','10000110100','10000110010',

'11000010010','11001010000','11110111010',

'11000010100','10001111010','10100111100',

'10010111100','10010011110','10111100100',

'10011110100','10011110010','11110100100',

'11110010100','11110010010','11011011110',

'11011110110','11110110110','10101111000',

'10100011110','10001011110','10111101000',

'10111100010','11110101000','11110100010',

'10111011110','10111101110','11101011110',

'11110101110','11010000100','11010010000',

'11010011100','1100011101011'

]

code_b_data={' ': 0, '!': 1, '"': 2, '#': 3, '$': 4,

'%': 5, '&': 6, ''': 7, '(': 8, ')': 9,

'*': 10, '+': 11, ',': 12, '-': 13, '.': 14,

'/': 15, '0': 16, '1': 17, '2': 18, '3': 19,

'4': 20, '5': 21, '6': 22, '7': 23, '8': 24,

'9': 25, ':': 26, ';': 27, '

'>': 30, '?': 31, '@': 32, 'A': 33, 'B': 34,

'C': 35, 'D': 36, 'E': 37, 'F': 38, 'G': 39,

'H': 40, 'I': 41, 'J': 42, 'K': 43, 'L': 44,

'M': 45, 'N': 46, 'O': 47, 'P': 48, 'Q': 49,

'R': 50, 'S': 51, 'T': 52, 'U': 53, 'V': 54,

'W': 55, 'X': 56, 'Y': 57, 'Z': 58, '[': 59,

'': 60, ']': 61, '^': 62, '_': 63, '`': 64,

'a': 65, 'b': 66, 'c': 67, 'd': 68, 'e': 69,

'f': 70, 'g': 71, 'h': 72, 'I': 73, 'j': 74,

'k': 75, 'l': 76, 'm': 77, 'n': 78, 'o': 79,

'p': 80, 'q': 81, 'r': 82, 's': 83, 't': 84,

'u': 85, 'v': 86, 'w': 87, 'x': 88, 'y': 89,

'z': 90, '{': 91, '|': 92, '}': 93, '~': 94,

'DEL': 95, 'FNC3': 96, 'FNC2': 97, 'SHIFT': 98,

'Code C': 99, 'FNC4': 100, 'Code A': 101,

'FNC1': 102, 'START A': 103, 'START B': 104,

'START C': 105, 'STOP': 106

}

def codeBFromString (string):

code=code_img_data[code_b_data['START B']]

count=1

checksum=code_b_data['START B']

for letter in string:

code += code_img_data[code_b_data[letter]]

checksum += count*code_b_data[letter]

count += 1

code += code_img_data[checksum%103]

code += code_img_data[code_b_data['STOP']]

return (code)

def codeBCFromString (string):

# Look for even numbered groups of digits (at least 4) to use code c

frags = re.split('(dd(?:dd)+)', string)

if frags[0]:

# the string starts with regular code b data

code = code_img_data[code_b_data['START B']]

checksum = code_b_data['START B']

codeb = True

else:

# the string starts with a matching set of numbers - code c

code = code_img_data[code_b_data['START C']]

checksum = code_b_data['START C']

codeb = False

frags.pop(0)

# remove the last frag if it's blank

# i.e. if the string ends with a matching numeric sequence

if not(frags[-1]):

frags.pop(-1)

count = 1

for frag in frags:

if codeb:

if count > 1: #switch to code b

code += code_img_data[100]

checksum += count*100

count += 1

for letter in frag:

code += code_img_data[code_b_data[letter]]

checksum += count*code_b_data[letter]

count += 1

else:

if count > 1: #switch to code c

code += code_img_data[code_b_data['Code C']]

checksum += count*code_b_data['Code C']

count += 1

for pair in re.findall('..', frag):

code += code_img_data[int(pair)]

checksum += count*int(pair)

count += 1

codeb = not(codeb)

code += code_img_data[checksum%103]

code += code_img_data[code_b_data['STOP']]

return (code)

def barcodeImg (string, label=''):

width = len(string) + 20

im = Image.new('1', (width,70), 1)

draw = ImageDraw.Draw(im)

x = 10

for char in string:

draw.rectangle(((x, 10),(x, 50)), fill=not(int(char)))

x += 1

if label:

labelsize = draw.textsize(label)

draw.text((int((width-labelsize[0])/2.0), 55), label, fill=0)

return im

bc_img = barcodeImg(codeBCFromString('496340'), '496340')

#bc_img.show()

bc_img.save("dsafdsa.png")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值