客户要求将微信的带参二维码增加log,首次生成的时候log直接是个没颜色的,客户想要给点颜色看看 ,第一次生成图片如下
生成的 | 客户需要的 |
原因是因为底图的数据通道和log的数据通道不同 为L 8像素 黑白,log 为RGB 3x8位像素 真彩
通道 一个图片可以包含一到多个数据通道,如果这些通道具有相同的维数和深度,Pil允许将这些通道进行叠加
模式
1 1位像素,黑和白,存成8位的像素
L 8位像素,黑白
P 8位像素,使用调色板映射到任何其他模式
RGB 3×8位像素,真彩
RGBA 4×8位像素,真彩+透明通道
CMYK 4×8位像素,颜色隔离
YCbCr 3×8位像素,彩色视频格式
I 32位整型像素
F 32位浮点型像素
现在知道原因了就好弄了 直接上代码
import cStringIO, urllib2,time
from PIL import Image
def CreateLogQrCode(url):
"""生成带log的二维码"""""
file = urllib2.urlopen(url)
tmpIm = cStringIO.StringIO(file.read())
base_img = Image.open(tmpIm) #放的是底图
print "二维码数据通道:",base_img.mode
base_img=base_img.convert("RGB") #将图片的mode 转成PGB
box = (160, 160, 270, 270) # 底图上需要P掉的区域,将图片放在什么位置上
tmp_img = Image.open('D:/WeChat-Project/Project_ANDY/AndyBiont2/static/upload/5.jpg') #放上去的log
print 'log数据通道:',tmp_img.mode
region = tmp_img.resize((box[2] - box[0], box[3] - box[1]),Image.ANTIALIAS)
base_img.paste(region, box)
nowTime = lambda: int(round(time.time() * 1000)) #毫秒级时间戳
# base_img.show()
url='D:/WeChat-Project/Project_ANDY/AndyBiont2/static/upload/qrcode_file/%s.png'%nowTime()
base_img.save(url,quality=100) #保存图片quality 为保存质量
return url
url='二维码地址'
ans=CreateLogQrCode(url)
print ans