使用Python自动生成带二维码的分享图片(基于PIL)附代码

最近做了一个需求,主要是对接一个公众号的活动部分,要求将前端传过来的相关数据生成一个带二维码的静态图片以便用户保存分享。经过一些搜索,最后决定使用Python的PIL(Pillow)包的Image, ImageFont, ImageDraw模块实现。

设计思路:由于是服务器端代码,希望图片都是在内存中,所以代码中对于存储图片都采用了BytesIO。好在Image.open()方法支持file-like的类型,所以用起来并不复杂。

随便做了一个(可以把你的设计师同事气到脑中风的)示例图,大致展示了这个项目可以提供的功能。



先放项目地址:https://github.com/HectorLI36/sharing_picture_generator

用法请见上面的GitHub里的README,本文详细说一下思路和注意事项,避免朋友们和我踩同样的坑。

下面说一下几个比较重要的模块。

1.生成二维码

这部分是相对来说比较简单的,只需要Python中的qrcode包即可。

import qrcode
qr_pil_obj = qrcode.make(url, border=0)
qr_code_pic = BytesIO()
qr_pil_obj.save(qr_code_pic, format='PNG')

参数 broder指的是二维码周围白圈的宽度,默认为4.

qrcode.make()方法返回的是一个PIL.Image对象。存成BytesIO以后,直接传到函数中就OK了。

2.设置字体对齐

PIL中ImageDraw模块的text()方法是在背景图片上用文本框的左上角定位的,但有时候我们需要文本居中,或文本的最后侧处于特定的位置,这就提出了一个问题。经过一番搜索,我决定自己算。。。

_font = ImageFont.truetype(*font_args, index
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用qrcode库来生成图片的二维码,具体步骤如下: 1. 安装qrcode库: ``` pip install qrcode ``` 2. 导入库: ``` import qrcode from PIL import Image ``` 3. 生成二维码: ``` qr = qrcode.QRCode(version=5, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=10, border=4) qr.add_data("https://www.example.com") qr.make(fit=True) img_qr = qr.make_image(fill_color="black", back_color="white") ``` 其中,version表示二维码的大小(1-40),error_correction表示纠错级别(L、M、Q、H),box_size表示每个小格子的像素大小,border表示二维码边框宽度,add_data()方法用来添加数据,make()方法用来生成二维码,make_image()方法用来生成图片。 4. 添加图片: ``` icon = Image.open("icon.png") img_qr = img_qr.convert("RGBA") icon = icon.resize((50, 50)) w, h = img_qr.size wi, hi = icon.size wb, hb = int((w - wi) / 2), int((h - hi) / 2) img_qr.paste(icon, (wb, hb), mask=None) ``` 其中,icon.png是要添加的图片,resize()方法用来调整图片大小,paste()方法用来将图片粘贴到二维码中心。 5. 保存图片: ``` img_qr.save("qr.png") ``` 完整代码如下: ``` import qrcode from PIL import Image qr = qrcode.QRCode(version=5, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=10, border=4) qr.add_data("https://www.example.com") qr.make(fit=True) img_qr = qr.make_image(fill_color="black", back_color="white") icon = Image.open("icon.png") img_qr = img_qr.convert("RGBA") icon = icon.resize((50, 50)) w, h = img_qr.size wi, hi = icon.size wb, hb = int((w - wi) / 2), int((h - hi) / 2) img_qr.paste(icon, (wb, hb), mask=None) img_qr.save("qr.png") ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值