以下转载自:点击打开链接
#二维码的中间添加一个logo图片
qr = qrcode.QRCode(
version = 1, #二维码大小(最小是1,是个21X21的矩阵,version+1,矩阵边长+4)
error_correction = qrcode.constants.ERROR_CORRECT_H,
#纠错等级_L(<=7%),_M(<=15%,默认),_Q(<=25%),_H(<=30%)
box_size = 10, #控制二维码中每个格子包含的像素
border = 0 #控制二维码与图片边界的距离,默认为4
)
qr.add_data("abcd")
qr.make(fit = True)
img = qr.make_image()
img = img.convert("RGBA") #设置颜色空间为RGBA(RGB + Alpha(透明度))
icon = Image.open("favicon.png")
"""
此处的favicon.png需要是真正的png图片,其他格式转过来的也不行
会报ValueError: bad transparency mask 错误
具体参考:http://blog.csdn.net/heybob/article/details/46944925
"""
img_w,img_h = img.size
factor = 4
size_w = int(img_w / factor)
size_h = int(img_h / factor)
icon_w,icon_h = icon.size
if icon_w > size_w:
icon_w = size_w
if icon_h > size_w:
icon_h = size_h #将log图像大小限定在二维码大小的1/4以内
icon = icon.resize((icon_w,icon_h),Image.ANTIALIAS)
w = int((img_w - icon_w) / 2 )
h = int((img_h - icon_h) / 2 ) #确定插入的log图像的位置(左上角的x,y坐标)
img.paste(icon,(w,h),icon)
img.save("img.png")
img.show()
如果3个定位角也自定义图片的话 (下面是21×21的)
import Image
import qrcode
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_H,
box_size=10,
border=0
)
qr.add_data("abcd")
qr.make(fit=True)
img = qr.make_image()
img = img.convert("RGBA")
icon = Image.open("favicon.png")
img_w, img_h = img.size
factor = 4
size_w = int(img_w / factor)
size_h = int(img_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((img_w - icon_w) / 2)
h = int((img_h - icon_h) / 2)
img.paste(icon, (w, h), icon)
# dot1
dot1 = Image.open("dot1.png")
dot1 = dot1.resize((30, 30), Image.ANTIALIAS)
img.paste(dot1, (20, 20), dot1)
# dot2
dot2 = Image.open("dot2.png")
dot2 = dot1.resize((30, 30), Image.ANTIALIAS)
img.paste(dot2, (160, 20), dot2) # 这个160随着version加1,大小加4*10, eg. 25*25是200
# dot3
dot3 = Image.open("dot3.png")
dot3 = dot1.resize((30, 30), Image.ANTIALIAS)
img.paste(dot3, (20, 160), dot3)
img.save("test_qrcodex.png")