在数字化时代,二维码的应用极为广泛,无论是商业推广、信息分享还是活动参与,都能看到二维码的身影。有时候,我们需要将生成的二维码与特定的图片结合,并在下方添加相关说明文字。本文将详细介绍如何使用 Python 实现生成二维码,将其贴到空白图上,并在二维码下方添加自动换行且居中的中文文字,同时解决可能出现的中文乱码和 textsize
方法弃用问题,最后提供一个可直接运行的实际操作案例。
在开始编写代码之前,我们需要安装两个关键的 Python 库:qrcode
和 Pillow
。qrcode
库用于生成二维码,Pillow
是 Python 中强大的图像处理库,用于处理图片和添加文字。可以使用以下命令进行安装:
pip install qrcode pillow
整个实现过程主要分为以下几个步骤:
qrcode
库根据指定的数据生成二维码图片。Pillow
库创建一个指定大小的空白图片。import qrcode
from PIL import Image, ImageDraw, ImageFont
def generate_qr_code(data):
"""
生成二维码图片
:param data: 二维码包含的数据
:return: 二维码图片对象
"""
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
qr.add_data(data)
qr.make(fit=True)
img = qr.make_image(fill_color="black", back_color="white")
return img
def paste_qr_on_blank(qr_img, blank_width, blank_height):
"""
将二维码粘贴到空白图上
:param qr_img: 二维码图片对象
:param blank_width: 空白图的宽度
:param blank_height: 空白图的高度
:return: 粘贴二维码后的图片对象
"""
blank_img = Image.new('RGB', (blank_width, blank_height), color='white')
qr_width, qr_height = qr_img.size
x = (blank_width - qr_width) // 2
y = (blank_height - qr_height) // 2
blank_img.paste(qr_img, (x, y))
return blank_img
def add_text_to_image(img, text, font_size=20, line_spacing=5):
"""
在图片上添加自动换行且居中的文字
:param img: 图片对象
:param text: 要添加的文字内容
:param font_size: 文字字体大小
:param line_spacing: 行间距
:return: 添加文字后的图片对象
"""
# 指定支持中文的字体文件路径,这里以 Windows 系统的 simhei.ttf 为例
# 如果你使用其他系统,需要替换为相应支持中文的字体文件路径
font_path = "simhei.ttf"
font = ImageFont.truetype(font_path, font_size)
draw = ImageDraw.Draw(img)
img_width, _ = img.size
max_chars_per_line = img_width // font_size
lines = []
while text:
if len(text) <= max_chars_per_line:
lines.append(text)
text = ""
else:
index = text.rfind(' ', 0, max_chars_per_line)
if index == -1:
index = max_chars_per_line
lines.append(text[:index])
text = text[index:].lstrip()
qr_width, qr_height = qr_img.size
qr_x = (img_width - qr_width) // 2
qr_y = (img.height - qr_height) // 2
text_y = qr_y + qr_height + 10
for line in lines:
# 使用 textbbox 方法替代 textsize
left, top, right, bottom = draw.textbbox((0, 0), line, font=font)
line_width = right - left
line_height = bottom - top
text_x = (img_width - line_width) // 2
draw.text((text_x, text_y), line, fill='black', font=font)
text_y += line_height + line_spacing
return img
if __name__ == "__main__":
# 二维码包含的数据
qr_data = "https://www.example.com"
# 生成二维码
qr_img = generate_qr_code(qr_data)
# 空白图的宽度和高度
blank_width = 500
blank_height = 600
# 将二维码粘贴到空白图上
combined_img = paste_qr_on_blank(qr_img, blank_width, blank_height)
# 要添加的中文文字内容
text = "这是一段示例文字,用于展示如何在二维码下方添加自动换行且居中的文字。"
# 在图片上添加文字
final_img = add_text_to_image(combined_img, text)
# 保存最终图片
final_img.save("final_image.png")
print("图片生成完成,已保存为 final_image.png")
generate_qr_code
函数该函数接受一个字符串数据作为参数,使用 qrcode
库生成对应的二维码图片对象并返回。通过设置二维码的版本、纠错级别、方块大小和边框等参数,确保生成的二维码符合需求。
paste_qr_on_blank
函数接受二维码图片对象和空白图的宽度、高度作为参数,创建一个空白图,并将二维码图片居中粘贴到空白图上,最后返回粘贴后的图片对象。通过计算二维码在空白图上的居中位置,实现了二维码的完美粘贴。
add_text_to_image
函数ImageFont.truetype
方法加载支持中文的字体文件(如 simhei.ttf
),解决中文乱码问题。textbbox
方法获取每行文字的宽度和高度,计算出文字的居中位置并绘制到图片上。在 if __name__ == "__main__"
块中,定义了二维码数据、空白图的大小和要添加的中文文字内容,依次调用上述三个函数生成最终图片,并保存为 final_image.png
。
C:\Windows\Fonts
路径下,找到 simhei.ttf
复制到项目目录即可(或者自行在网上下载字体)。通过本文的介绍和代码示例,你可以轻松使用 Python 生成二维码,将其集成到空白图上,并在下方添加自动换行且居中的中文文字。这个功能在很多实际场景中都非常有用,如制作海报、宣传页等。希望本文能帮助你快速实现相关需求,如果你在实践过程中遇到任何问题,欢迎在评论区留言交流。