import qrcode
from PIL import Image, ImageDraw, ImageFont
import os
# 输入库位编码和名称
qr_text = input("输入库位编码:")
qr_name = input("输入库位名称:")
# 检查输入是否为空
if not qr_text or not qr_name:
print("库位编码和名称不能为空!")
exit()
# 生成二维码
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=30,
border=4,
)
qr.add_data(qr_text)
qr.make(fit=True)
img = qr.make_image(fill='black', back_color='white')
# 加载字体(使用系统默认字体或指定字体路径)
try:
font_path = "arial.ttf" # 可以替换为字体文件的完整路径
font = ImageFont.truetype(font_path, 80)
except IOError:
print("字体文件未找到,使用默认字体。")
font = ImageFont.load_default()
# 创建可以在图片上绘图的对象
draw = ImageDraw.Draw(img)
# 计算文本位置(居中)
# 使用 getbbox 获取文本的边界框
text_bbox = font.getbbox(qr_name)
text_width = text_bbox[2] - text_bbox[0] # 右边界 - 左边界
text_height = text_bbox[3] - text_bbox[1] # 下边界 - 上边界
img_width, img_height = img.size
text_x = (img_width - text_width) // 2
text_y = 20 # 距离顶部的距离
# 绘制文本
draw.text((text_x, text_y), qr_name, font=font, fill='black')
# 保存图片
output_filename = f"{qr_name}.png"
img.save(output_filename)
print(f"二维码已保存为 {output_filename}")