
Python生成带圆角图片的二维码
发布日期:2021-05-12 17:13:58
浏览次数:20
分类:精选文章
本文共 3981 字,大约阅读时间需要 13 分钟。
以下是优化后的内容:
Python 二维码生成与圆角处理实例
本文将展示两个实用的 Python 脚本,用于二维码生成及图标处理,帮助开发者快速实现高质量的二维码设计。
示例代码1:中心图片四周圆角处理
#!/usr/bin/python# -*- coding: UTF-8 -*-# author: Carl time:2020/5/15import qrcodefrom PIL import Image, ImageFile, ImageDrawLOAD_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-8import qrcodefrom 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
函数可以实现圆角处理,使二维码外观更加美观且专业。同时,代码结构清晰,便于扩展和修改,适合不同场景下的二维码设计需求。
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年05月02日 01时20分42秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
BUU-MISC-caesar
2019-03-09
【专题2:电子工程师 之 上位机】 之 【36.事件重载】
2019-03-09
【专题3:电子工程师 之 上位机】 之 【46.QT音频接口】
2019-03-09
一文学会JVM常见参数设置+调优经验(JDK1.8)
2019-03-09
一文理解设计模式--命令模式(Command)
2019-03-09
VTK:可视化之RandomProbe
2019-03-09
block多队列分析 - 2. block多队列的初始化
2019-03-09
Java时间
2019-03-09
不编译只打包system或者vendor image命令
2019-03-09
MySQL
2019-03-09
The wxWindows Library Licence (WXwindows)
2019-03-09
leetcode——第203题——虚拟头结点
2019-03-09
【编程】C语言入门:1到 100 的所有整数中出现多少个数字9
2019-03-09
MySQL----基础及常用命令
2019-03-09
模拟集成:MOS管的工作区小误区(简单版)
2019-03-09
flink启动(二)
2019-03-09
前端开发进阶手册.pdf
2019-03-09
110.无限叠卡特效
2019-03-09
软件架构设计和MESH经验之谈
2019-03-09
redis持久化分析
2019-03-09