Python生成带圆角图片的二维码
发布日期:2021-05-12 17:13:58 浏览次数:20 分类:精选文章

本文共 3981 字,大约阅读时间需要 13 分钟。

以下是优化后的内容:


Python 二维码生成与圆角处理实例

本文将展示两个实用的 Python 脚本,用于二维码生成及图标处理,帮助开发者快速实现高质量的二维码设计。

示例代码1:中心图片四周圆角处理

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# author: Carl time:2020/5/15
import qrcode
from PIL import Image, ImageFile, ImageDraw
LOAD_TRUNCATED_IMAGES = True
# 设置中心图片四周圆角
def circle_crop_image(im):
rad = 10 # 设置半径
circle = Image.new('L', (rad * 2, rad * 2), 0)
draw = ImageDraw.Draw(circle)
draw.ellipse((0, 0, rad * 2, rad * 2), fill=255)
alpha = Image.new('L', im.size, 255)
w, h = im.size
alpha.paste(circle.crop((0, 0, rad, rad)), (0, 0))
alpha.paste(circle.crop((0, rad, rad, rad * 2)), (0, h - rad))
alpha.paste(circle.crop((rad, 0, rad * 2, rad)), (w - rad, 0))
alpha.paste(circle.crop((rad, rad, rad * 2, rad * 2)), (w - rad, h - rad))
im.putalpha(alpha)
return im
# 生成二位码
def create_qr_code(url, file_name, icon_file=None):
qr = qrcode.QRCode(
version=5,
error_correction=qrcode.constants.ERROR_CORRECT_H,
box_size=6,
border=4,
)
qr.add_data(url)
qr.make(fit=True)
img = qr.make_image(fill_color="#3ac25b", back_color="#FFF")
img = img.convert("RGBA")
if icon_file:
icon = Image.open(icon_file)
w, h = img.size
factor = 4
size_w = int(w / factor)
size_h = int(h / factor)
icon_w, icon_h = icon.size
if icon_w > size_w:
icon_w = size_w
if icon_h > size_h:
icon_h = size_h
icon = icon.resize((icon_w, icon_h), Image.ANTIALIAS)
w = int((w - icon_w) / 2)
h = int((h - icon_h) / 2)
icon = icon.convert("RGBA")
# 圆角处理中心图片
circle_crop_image(icon)
img.paste(icon, (w + 1, h + 1))
img.show()
img.save(file_name + '.png', quality=100)
# 示例调用
create_qr_code('http://www.baidu.com', "hnww", "logo.jpg")

示例代码2:中心图片周围有白边

# coding = utf-8
import qrcode
from PIL import Image, ImageDraw
# 设置圆角
def circle_crop_image(im, radii):
circle = Image.new('L', (radii * 2, radii * 2), 0)
draw = ImageDraw.Draw(circle)
draw.ellipse((0, 0, radii * 2, radii * 2), fill=255)
img = im.convert("RGBA")
w, h = img.size
alpha = Image.new('L', img.size, 255)
# 四个角的圆角处理
alpha.paste(circle.crop((0, 0, radii, radii)), (0, 0))
alpha.paste(circle.crop((radii, 0, radii * 2, radii)), (w - radii, 0))
alpha.paste(circle.crop((radii, radii, radii * 2, radii * 2)), (w - radii, h - radii))
alpha.paste(circle.crop((0, radii, radii, radii * 2)), (0, h - radii))
im.putalpha(alpha)
return im
# 生成二位码
def create_qr_code(url, icon_file, file_name, save_path):
qr = qrcode.QRCode(
version=5,
error_correction=qrcode.ERROR_CORRECT_H,
box_size=6,
border=4,
)
qr.add_data(url)
qr.make(fit=True)
img = qr.make_image(fill_color="#3ac25b", back_color="#FFF")
img = img.convert("RGBA")
icon = Image.open(icon_file)
icon = icon.convert("RGBA")
w, h = img.size
icon_w, icon_h = icon.size
if icon_w > 80:
icon = icon.resize((80, 80), Image.ANTIALIAS)
icon_w, icon_h = icon.size
w = int((w - 80) / 2)
h = int((h - 80) / 2)
else:
w = int((w - icon_w) / 2)
h = int((h - icon_h) / 2)
# 白底图处理
white_img = Image.new("RGBA", (icon_w + 20, icon_h + 20), (255, 255, 255))
white_img = circle_crop_image(white_img, 6)
# 灰底图处理
gray_img = Image.new("RGBA", (icon_w, icon_h), (230, 230, 230))
gray_img = circle_crop_image(gray_img, 6)
white_img.paste(gray_img, (10, 10), gray_img)
img.paste(white_img, (w - 5, h - 5), white_img)
img.paste(icon, (w + 5, h + 5), icon)
img.save(save_path + file_name + '.png', quality=100)
# 示例调用
icon_path = 'logo.jpg'
save_path = 'E:/qt_demo/'
create_qr_code('http://www.zhousc.cn', icon_path, 'cs', save_path)

以上代码均基于 Python 实现,适用于二维码生成及图标处理需求。通过 circle_crop_image 函数可以实现圆角处理,使二维码外观更加美观且专业。同时,代码结构清晰,便于扩展和修改,适合不同场景下的二维码设计需求。

上一篇:C++ 和 Arduino 数据类型转换 int 转换为 char
下一篇:收藏汇总 个人常用的技术教程或参考链接 按需更新

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2025年05月02日 01时20分42秒