码迷,mamicode.com
首页 > 其他好文 > 详细

批量生成二维码打包成exe文件

时间:2018-01-22 17:41:03      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:文件   error   list   color   base   log   rip   元组   rom   

需求:  根据url 和 文件名称 生成二维码   将二维码放到背景图上合成一张二维码
思路: 使用qrcode库 获取二维码 保存本地  全部完成后 与本地背景图合成   最后使用pyinstaller将python打包成exe文件
# -*- coding: utf-8 -*-  
import urllib;
import os
import time
import threadpool
from PIL import Image
import qrcode  

path = os.getcwd() + os.path.sep + finally
if not os.path.exists(path):
    os.makedirs(path)
    print create folder  + path
    
path = os.getcwd() + os.path.sep + download
if not os.path.exists(path):
    os.makedirs(path)
    print create folder  + path
        
def downloadImg(line):
    url = http://qr.liantu.com/api.php?text= + line.split()[0]
    name = line.split()[1]
    print \n downloading  + path + os.path.sep+  %s.jpg % name
    urllib.urlretrieve(url, path + os.path.sep+  %s.jpg % name)

def generateQRcodeLocal(line):
    qr = qrcode.QRCode(version=1,error_correction=qrcode.constants.ERROR_CORRECT_L,box_size=15,border=1,)
    qr.add_data(line.split()[0].strip())
    qr.make(fit=True)
    name = line.split()[1].strip()
    img = qr.make_image()
    imagename = path + os.path.sep+  %s.jpg % name
    print \n name: + name +  \t imagename: + imagename
    img.save(imagename)
    cropImg(name)

def cbk(a,b):
    print ‘‘ % a
    print ‘‘ % b
 
def cropImg(imgname):
    #imgname=line.split()[1]
    #加载底图   
    base_img = Image.open(urbg.jpg)
    # 可以查看图片的size和mode,常见mode有RGB和RGBA,RGBA比RGB多了Alpha透明度
    # print base_img.size, base_img.mode
    box = (349,403,1141,1195)  # 底图上需要P掉的区域
    try:
        #加载需要P上去的图片
        tmp_img = Image.open(urdownload\%s.jpg % imgname)
        #这里可以选择一块区域或者整张图片
        #region = tmp_img.crop((0,0,304,546)) #选择一块区域
        #或者使用整张图片
        region = tmp_img

        #使用 paste(region, box) 方法将图片粘贴到另一种图片上去.
        # 注意,region的大小必须和box的大小完全匹配。但是两张图片的mode可以不同,合并的时候回自动转化。如果需要保留透明度,则使用RGMA mode
        #提前将图片进行缩放,以适应box区域大小
        # region = region.rotate(180) #对图片进行旋转
    
        region = region.resize((box[2] - box[0], box[3] - box[1]))
        base_img.paste(region, box)
        #base_img.show() # 查看合成的图片
    
        base_img.save(urfinally\%s.jpg % imgname) #保存图片
    except IOError,e:
        print fail to crop image: + imgname + .jpg
        
    
    
name_list =[]
for line in open(list.txt,r):
    if line.strip():
        name_list.append(line)
       # print line.split()[0]

print total size: + str(len(name_list))
start_time = time.time()
totalThread = 50
if len(name_list) >= 5000:
    totalThread = 80
if len(name_list) >= 10000:
    totalThread = 100
print total thead size: + str(totalThread)
pool = threadpool.ThreadPool(totalThread) 
requests = threadpool.makeRequests(generateQRcodeLocal, name_list)
map(pool.putRequest, requests)
#[pool.putRequest(req) for req in requests]
pool.wait()    # 阻塞线程
#pool.poll()   # 不阻塞线程


#print ‘start crop img now..... total size:‘ + str(len(name_list))
#for line in name_list:
    #cropImg(line.split()[1])

print fail to generate image file size: + str(error_size)
result = input( total cost:  + %d second% (time.time()-start_time) +  press any key to exit...)
os._exit()
"""
这个程序主要是任务是获取url从网上生成二维码下载到本地 再放到背景图上
背景图的区域是该区域使用四元组来指定。四元组的坐标依次是(左,上,右,下)。PIL 中指定坐标系的左上角坐标为(0,0)
很多东西是写死的  比如下载文件的路径 生成图片的路径  以及背景图名称 
"""

 

批量生成二维码打包成exe文件

标签:文件   error   list   color   base   log   rip   元组   rom   

原文地址:https://www.cnblogs.com/zeroones/p/8329511.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!