在ubuntu 16.04.5 LTS上使用Python 2.7生成带logo的二维码实战

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tao_627/article/details/85054879

安装依赖库

详细的使用python模块qrcode库的博文,参见

https://blog.csdn.net/tao_627/article/details/85053884

下面的例子需要使用qrcode,pillow,matplotlib和python-tk库,安装如下

sudo pip install qrcode
sudo pip install pillow
sudo pip install matplotlib
sudo apt-get install python-tk

代码如下

#!/usr/bin/env python
#encoding: utf-8
#description: 生成二维码,中间带logo
#date: 2018-12-17
       
import qrcode
from PIL import Image
import matplotlib.pyplot as plt 
       
def getORCode(strs, name):
    qr = qrcode.QRCode(
            version=1,
            error_correction=qrcode.constants.ERROR_CORRECT_L,
            box_size=10,
            border=2,
            )
    #添加数据
    qr.add_data(strs)
    #填充数据
    qr.make(fit=True)
    #生成图片
    img = qr.make_image(fill_color="blue", back_color="white")
    #img = img.convert("CMYK")                                                                                                                                           
       
    #添加logo
    icon = Image.open("1233.png")
    #获取图片的宽高
    img_w, img_h = img.size
    factor = 6 
    size_w = int(img_w / factor)
    size_h = int(img_h / factor)
    #获取logo的宽高
    icon_w, icon_h = icon.size
    if icon_w > size_w:
        icon_w = size_w
    if icon_h > size_h:
        icon_h = size_h
    #重新设置logo的尺寸
    icon = icon.resize((icon_w, icon_h), Image.ANTIALIAS)
    w = int((img_w - icon_w) / 2)
    h = int((img_h - icon_h) / 2)
    img.paste(icon, (w, h), icon)
    #显示图片
    plt.imshow(img)
    plt.show()
    img.save(name)

    return img
    
if __name__ == '__main__':
    getORCode('https://music.163.com/song?id=36990266&userid=112961323', '03.png')
    print('execute......') 

执行下面的命令

python qrcode_demo3.py

然后会弹出一个新窗口,显示蓝色的二维码图,使用微信扫描,会自动跳转到网易云音乐的一个播放页面,开始播放歌曲。

效果如下

遇到的坑记录如下

1.缺python-tk包

解决方法:sudo apt-get install python-tk

2.img.paste()函数报错

self.im.paste(im, box, mask.im)
ValueError: bad transparency mask

发现网上这篇文章

https://blog.csdn.net/dugudaibo/article/details/78894565

有启发,将原来的logo文件由jpeg格式替换为png格式的图片,就可以了。

3.无法保存二维码图片

IOError: cannot write mode CMYK as PNG

将CMYK那行代码注释掉。

猜你喜欢

转载自blog.csdn.net/tao_627/article/details/85054879