• 示例代码1
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# author: Carl time:2020/5/15import qrcode
from PIL import Image, ImageFile, ImageDrawImageFile.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.sizealpha.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)# 添加二维码内容,可以直接是字符串文本,也可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.sizefactor = 4size_w = int(w / factor)size_h = int(h / factor)icon_w, icon_h = icon.sizeif icon_w > size_w:icon_w = size_wif icon_h > size_h:icon_h = size_hicon = icon.resize((icon_w, icon_h), Image.ANTIALIAS)w = int((w - icon_w) / 2)h = int((h - icon_h) / 2)icon = icon.convert("RGBA")# ------以下是进一步处理中心图片,可省略------# 白底图white_img = Image.new("RGBA", (icon_w + 6, icon_h + 6), (255, 255, 255))# 白底图圆角处理# white_img = circle_crop_image(white_img)# 灰底图gray_img = Image.new("RGBA", (icon_w + 2, icon_h + 2), (230, 230, 230))# 灰底图圆角处理gray_img = circle_crop_image(gray_img)# 粘贴灰底图white_img.paste(gray_img, (2, 2))# 粘贴白图img.paste(white_img, (w - 2, h - 2))# icon处理圆角icon = circle_crop_image(icon)# ----------------以上----------------# 粘贴iconimg.paste(icon, (w + 1, h + 1))img.show()img.save('' + file_name + '.png', quality=100)icon_path = "logo.jpg"  # 中心图片
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)# 把原图转换成RGBA模式,增加alpha通道img = im.convert("RGBA")w, h = img.size# 画4个角(将整圆分离为4个部分)再粘贴到alpha通道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))# 白色区域透明可见,黑色区域不可见img.putalpha(alpha)return img# 生成二位码
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)# 把RGB的图转换成RGBA模式,处理alpha透明通道(后边替换透明为白色)icon = icon.convert("RGBA")w, h = img.sizeicon_w, icon_h = icon.size# 超过80的压缩到80if icon_w > 80:icon = icon.resize((80, 80), Image.ANTIALIAS)icon_w, icon_h = icon.sizew = int((w - 80) / 2)h = int((h - 80) / 2)else:w = int((w - icon_w) / 2)h = int((h - icon_h) / 2)# 把png背景色转换为白色,避免处理裁剪圆角时出现黑边w_d = Image.new('RGBA', icon.size, (255, 255, 255))w_d.paste(icon, (0, 0, icon_w, icon_h), icon)# r = icon_w // 15r = 6icon = circle_crop_image(w_d, r)# 白底图(尺寸大小)white_img = Image.new("RGBA", (icon_w+20, icon_h+20), (255, 255, 255))white_img = circle_crop_image(white_img, r)# 灰底图gray_img = Image.new("RGBA", (icon_w, icon_h), (230, 230, 230))# 灰底图圆角处理gray_img = circle_crop_image(gray_img, r)# 粘贴灰底图(起点坐标 = (白图长 - 灰图长) / 2)white_img.paste(gray_img, (10, 10), gray_img)# 粘贴白图(位置起点坐标)img.paste(white_img, (w-5, h-5), white_img)# 粘贴icon(起点坐标)img.paste(icon, (w + 5, h + 5), icon)save_file = save_path + file_name + '.png'img.save(save_file, quality=100)# img.show()return save_fileif __name__ == '__main__':icon_path = 'logo.jpg'save_path = 'E:/qt_demo/'create_qr_code('http://www.zhousc.cn', icon_path, 'cs', save_path)
  • 参考链接
  1. QRCode二维码生成和识别
  2. qrcode库生成二维码时填充logo变成黑白色的解决
  3. Python 生成带Logo的圆角带边框二维码

Python生成带圆角图片的二维码相关推荐

  1. 使用vue-qr生成带中间带图片的二维码

    1.安装 npm install vue-qr --save 2.在页面中使用 logoSrc:二维码中间的logo图 size:图片尺寸 text:二维码地址或内容 margin:二维码图片的空白边 ...

  2. 微信公众号怎么生成带统计的渠道二维码

    公众号生成带统计的渠道二维码,通过公众号开发接口生成带参数的二维码实现,记录粉丝关注取关的结果,包含粉丝昵称.粉丝头像等都是公众号平台提供的接口开发.微号帮平台现有功能渠道二维码生成实现,也可以自己开 ...

  3. 基于phpqrcode生成带LOGO图标的二维码(源代码例子)

    基于phpqrcode生成带LOGO图标的二维码(源代码例子) <?php //文件输出 include('phpqrcode.php'); // 二维码数据 $data = 'http://w ...

  4. qrcode生成一个带有图片的二维码

    import qrcode     qr = qrcode.QRCode(     version=2,     error_correction=qrcode.constants.ERROR_COR ...

  5. java 生成带网络头像的二维码

    最近做一个带微信头像的二维码的功能,微信头像是一个链接,所以先把微信头像下载,临时保存,生成二维码 /*** 文件下载工具类** @author zhengxinghua*/ public class ...

  6. 如何生成带统计参数的二维码渠道监测

    随着互联网技术的发展,二维码成为App流量分发的主流形式,我们能在各种不同的场合看到扫码入口.这种形式的App推广相较于链接.应用商店而言更加简单灵活,既能打通线上线下的信息通道,也可以植入到图文内容 ...

  7. Java 绘制带圆角头像的二维码

    导入相关的jar包 <!--Qrcode creator--><dependency><groupId>com.google.zxing</groupId&g ...

  8. 微信公众号开发----生成带参数的临时二维码

    本文只提供代码实现,具体参数含义请先仔细阅读微信公众号技术文档之生成带参数的二维码 临时二维码请求说明: 一.常量类 public class WechartConst {//生成带参数的二维码pub ...

  9. JS生成带Logo的QRCode二维码

    一:jquery.qrcode.min.js QRCode的JS库下载(自己百度或者直接下载最后的Demo): 二:选定自己需要放在二维码中间的一个Logo图片: 三:代码实现: <!DOCTY ...

最新文章

  1. 【Qt】 error: LNK1107: 文件无效或损坏: 无法在 0x310 处读取
  2. 3d slicer调整窗宽窗位_3D人脸模型月销量上千单,谁在打印,谁在帮打?
  3. sqlite数值长度超过7位出错_数值计算方法 第一章 绪论
  4. python正规教育机构-Python培训机构多吗 选择Python培训这些你都知道吗
  5. 如何配置三层交换机创建VLAN 3
  6. STM32F2xx DMA Controllers
  7. 刷机提示图像和设备不匹配_安卓5.0升级失败如何解决 安卓5.0刷机失败解决方法介绍【教程】...
  8. 关于heapsize heapgrowthlimit
  9. 路由器连网提示服务器无响应,路由器提示服务器无响应
  10. (四)怎么优化 where 子句
  11. Unbuntu 安装 TeamViewer14
  12. 既有住宅加装电梯数学建模问题
  13. Excel シートインポート、Excel シートエクスポート
  14. 10-4 查找至少选修两门课程的学生学号
  15. bookkeeper命令行操作
  16. linux ip_tos,IP_TOS选项
  17. 【数学建模】模糊综合评价
  18. 德鲁克:优秀的管理者,都做到了这3点
  19. php日期格式化年月日时分秒,php Date()函数输出中文年月日时分秒
  20. 百度 2021 Lic 机器阅读理解比赛有感

热门文章

  1. 多版本node安装相关知识
  2. 北京某公司前端笔试题及其答案
  3. PostGIS系列课程之Geography
  4. 那些家装巨头为什么都不融资了?
  5. Unity3d 实现录音、播放和保存功能
  6. php微博cookie获取,python模拟新浪微博登陆之获取cookies-Go语言中文社区
  7. 在全球超大规模协作中寻找创新机会:远程协作、分布式、开源、新型组织、群体智能...
  8. 恶搞php表情包,PS制作搞笑的金馆长表情或修改金馆长表情文字
  9. keras、TensorFlow输出中间层结果的4种方法
  10. 机器学习基础(一)混淆矩阵,真阳性(TP),真阴性(TN),假阳性(FP),假阴性(FN)以及敏感性(Sensitivity)和特异性(Specificity)