Python 生成二维码方式就不累述了,不会的自己百度吧

但python生成的二维码太难看了,要么没有logo,要么logo直接贴进去的,难看死了,有的也处理了一下,但没有圆角,也难看:

以下:是不是觉得后边几个好看!!!

直接上代码:

 1 # coding = utf-8
2 # 二维码生成
3
4 import qrcode
5 from PIL import Image, ImageDraw
6
7
8 # 设置圆角
9 def circle_crop_image(im, radii):
10 # 创建一个黑色背景的画布
11 circle = Image.new('L', (radii * 2, radii * 2), 0)
12 # 画黑色方形
13 draw = ImageDraw.Draw(circle)
14 # 画白色圆形
15 draw.ellipse((0, 0, radii * 2, radii * 2), fill=255)
16 # 把原图转换成RGBA模式,增加alpha通道
17 img = im.convert("RGBA")
18 w, h = img.size
19 # 画4个角(将整圆分离为4个部分)再粘贴到alpha通道
20 alpha = Image.new('L', img.size, 255)
21 # 左上角
22 alpha.paste(circle.crop((0, 0, radii, radii)), (0, 0))
23 # 右上角
24 alpha.paste(circle.crop((radii, 0, radii * 2, radii)), (w - radii, 0))
25 # 右下角
26 alpha.paste(circle.crop((radii, radii, radii * 2, radii * 2)), (w - radii, h - radii))
27 # 左下角
28 alpha.paste(circle.crop((0, radii, radii, radii * 2)), (0, h - radii))
29 # 白色区域透明可见,黑色区域不可见
30 img.putalpha(alpha)
31 return img
32
33
34 # 生成二位码
35 def create_qr_code(url, icon_file, file_name, save_path):
36 qr = qrcode.QRCode(
37 version=5,
38 # 设置容错率为最高
39 error_correction=qrcode.ERROR_CORRECT_H,
40 box_size=5,
41 border=1,
42 )
43 qr.add_data(url)
44 qr.make(fit=True)
45 img = qr.make_image()
46 img = img.convert("RGBA")
47 icon = Image.open(icon_file)
48 # 把RGB的图转换成RGBA模式,处理alpha透明通道(后边替换透明为白色)
49 icon = icon.convert("RGBA")
50 w, h = img.size
51 icon_w, icon_h = icon.size
52 # 超过80的压缩到80
53 if icon_w > 80:
54 icon = icon.resize((80, 80), Image.ANTIALIAS)
55 icon_w, icon_h = icon.size
56 w = int((w - 80) / 2)
57 h = int((h - 80) / 2)
58 else:
59 w = int((w - icon_w) / 2)
60 h = int((h - icon_h) / 2)
61 # 把png背景色转换为白色,避免处理裁剪圆角时出现黑边
62 w_d = Image.new('RGBA', icon.size, (255, 255, 255))
63 w_d.paste(icon, (0, 0, icon_w, icon_h), icon)
64 # r = icon_w // 15
65 r = 6
66 icon = circle_crop_image(w_d, r)
67 # 白底图
68 white_img = Image.new("RGBA", (icon_w + 6, icon_h + 6), (255, 255, 255))
69 white_img = circle_crop_image(white_img, r)
70 # 灰底图
71 gray_img = Image.new("RGBA", (icon_w + 2, icon_h + 2), (230, 230, 230))
72 # 灰底图圆角处理
73 gray_img = circle_crop_image(gray_img, r)
74 # 粘贴灰底图
75 white_img.paste(gray_img, (2, 2), gray_img)
76 # 粘贴白图
77 img.paste(white_img, (w - 2, h - 2), white_img)
78 # 粘贴icon
79 img.paste(icon, (w + 1, h + 1), icon)
80 save_file = save_path + file_name + '.png'
81 img.save(save_file, quality=100)
82 # img.show()
83 return save_file
84
85
86 if __name__ == '__main__':
87
88 icon_path = '/Users/drew/.jenkins/workspace/Android/app/src/main/res/mipmap-xxhdpi/ic_collect_icon.png'
89 save_path = '/Users/Work/PycharmProjects/FM_Build_Packaging/resources/img/qrcode'
90 create_qr_code('http://www.thecover.cn', icon_path, 'cs', 'save_path')

以上,都有注释。

另外说明一下,PIL在python3.x版本需要安装的是pillow。

遇到的坑:

Image.open('file\\img\\80.png')  这个地方打开图片时候报错:

raise OSError(message + " when reading image file")
OSError: broken data stream when reading image file

加了以下代码:

from PIL import Image, ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True

不报错了,但是一直没法把icon粘贴过去,后来才知道,icon没有读取出来,原图有问题,图片估计是损坏了,换个图就ok了!

所以,不要以为代码不报错了,就没问题了,哎,坑~~~

再者,我们APP的icon都是.png,模式都是RGB,都有透明背景,无论是压缩后裁剪还是裁剪后压缩,有的APP的logo都会出现黑色边框:

这个问题困扰了差不多半个月,找了各种方法都没解决掉,偶然间看到有人把透明背景替换成白色,突然间就找到怎么解决黑边的问题:

为什么不把图片的透明层直接替换成白色呢~~哈哈哈~~

替换成白色背景时候原图一定要转换成RGBA,用mask覆盖就行。

有遇到坑的欢迎留言交流。

 

Python 生成带Logo的圆角带边框二维码的更多相关文章

  1. java二维码生成-谷歌(Google.zxing)开源二维码生成学习及实例

    java二维码生成-谷歌(Google.zxing)开源二维码生成的实例及介绍   我们使用比特矩阵(位矩阵)的QR码编码在缓冲图片上画出二维码 实例有以下一个传入参数 OutputStream ou ...

  2. PIL:Python Imaging Library(图像处理标准库)和Qrcode:二维码生成

    安装PIL Mac或Linux安装命令:sudo easy_install PIL 如果报错:fatal error: 'freetype/fterrors.h' file not found Mac ...

  3. 用Python+qrcode库创建一个包含信息的二维码

    安装qrcode库和PIL库 在命令行中分别输入pip install qrcode 和pip install pillow 导入库格式如下: import PIL import qrcode 下面以 ...

  4. python 一个函数让你决定你的二维码

    今天浏览网页时无意中看到了一个特别有趣的二维码,感觉挺有意思的,回来后自己查了一下,发现挺简单的,就分享一下,挺有意思的.该函数的主要流程就是MyQR库中的myqr.run()函数,将连接转化为二维码 ...

  5. 二维码(支持arc,苹果自带扫描,zbar扫描,二维码生成)

    下载地址:http://pan.baidu.com/s/1mgvJzyo

  6. java生成二维码(带logo)

    之前写过一篇不带logo的二维码实现方式,採用QRCode和ZXing两种方式 http://blog.csdn.net/xiaokui_wingfly/article/details/3947618 ...

  7. ZXing生成条形码、二维码、带logo二维码

    采用的是开源的ZXing,Maven配置如下,jar包下载地址,自己选择版本下载,顺便推荐下Maven Repository <!-- https://mvnrepository.com/art ...

  8. 带logo图片或不带logo图片的二维码生成与解析,亲测成功

    最近公司需要实现二维码功能,本人经过一顿百度,终于实现了,因有3个功能:不带logo图片.带logo图片.解析二维码,篇幅较长,请耐心读之,直接复制粘贴即可. 前提:myeclipse10:jar包: ...

  9. 生成二维码、条形码、带logo的二维码

    Nuget安装ZXing.Net,帮助类: using System; using System.Collections.Generic; using System.Drawing; using Sy ...

  10. php背景图片上生成二维码,二维码上带logo 代码示例 (原)

    依赖库文件 phpqrcode.php (下载地址://www.jb51.net/codes/189897.html :或者在官网下载:http://phpqrcode.sourceforge.net ...

随机推荐

  1. C++ STL之 map 学习笔记

    •何为 map? map 是 STL 的一个关联容器,它提供一对一的数据处理,map 中存放的是一个 key-value键值对,其类型可以自己定义: 第一个可以称为关键字,每个关键字在 map 中只能 ...

  2. MDC实现微服务链路追踪

    一.问题背景 在微服务架构中,我们没办法快速定位用户在一次请求中对应的所有日志,在排查生产问题的时候会非常困难,那是因为我们在输出的日志的时候没把请求的唯一标示输出到我们的日志中,导致我们没办法根据一 ...

  3. C#实现一个简单的日志类

    目录 自定义日志类 NLog版本的日志类 Serilog版本的日志类 上个月换工作,新项目又要重新搭建基础框架,把日志实现部分单独记录下来方便以后参考. 自定义日志类 代码大部分使用ChatGPT生成 ...

  4. Linux 服务器Python后台运行服务(ssh断开不退出)

    壹: 最近用python搭建一个物联网数据存储的微服务,部署到ubuntu上去,所以,python后台运行是一个必不可少的环节. 贰: 这个只需要是一个命令即可: 命令1(记录所有日志): nohup ...

  5. PBKDF2算法:保障密码安全的利器

    PBKDF2算法起源: PBKDF2(Password-Based Key Derivation Function 2)算法是一种基于密码的密钥派生函数,最初由RSA实验室的密码学家提出,用于从密码中 ...

  6. 24_用Qt和FFmpeg实现简单的YUV播放器

    前面文章FFmpeg像素格式转换中我们使用FFmpeg实现了一个像素格式转换工具类,现在我们就可以在Qt中利用QImage很容易的实现一个简单的YUV播放器了. 播放器功能很简单,只有播放.暂停和停止 ...

  7. 什么是XR扩展现实,XR云串流平台有哪些

    什么是云XR (AR/VR/MR/SR) 虚拟现实(VR),传统的实现方式是通过计算机模拟虚拟环境,从而给人一种环境沉浸感.与传统视频相比,VR带来了前所未有的沉浸式体验. 增强现实(AR)是一种无缝 ...

  8. 记录--vue3的宏到底是什么东西?

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 从vue3开始vue引入了宏,比如defineProps.defineEmits等.我们每天写vue代码时都会使用到这些宏,但是你有 ...

  9. ForkJoinPool在生产环境中使用遇到的一个问题

    1.背景 在我们的项目中有这么一个场景,需要消费kafka中的消息,并生成对应的工单数据.早些时候程序运行的好好的,但是有一天,我们升级了容器的配置,结果导致部分消息无法消费.而消费者的代码是使用Co ...

  10. Java中一个逐渐被遗忘的强大功能,强到你难以置信!!

    大家好,我是冰河~~ 说起Java,简单好用,但是Java中很多牛逼的技术却逐渐被遗忘了~~ 在Java语言出现之前,很多系统都是使用C和C++开发的.Java出现之后,由于其面向对象的思想更加符合人 ...