批量生成二维码打包成exe文件
2017-07-31 16:22
453 查看
需求: 根据url 和 文件名称 生成二维码 将二维码放到背景图上合成一张二维码
思路: 发送请求至http://qr.liantu.com获取二维码 保存本地 下载全部完成后 与本地背景图合成 最后使用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(ur'bg.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(ur'download\%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(ur'finally\%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)
很多东西是写死的 比如下载文件的路径 生成图片的路径 以及背景图名称
"""
第一次改进: 网络生成有毒 使用qrcode库去生成 调节了并发线程数量 达到加速的效果。 win8同级目录下6AJD.jpg 和 6AJd.jpg不能共存 ,注意这个坑
打包好的exe文件和说明已经上传到csdn上了 http://download.csdn.net/detail/cjvs9k/9917300
遇到一些问题
PIL安装 直接去官网下载exe文件 (本人win8系统)
多线程阻塞 资料不完整 导致 下载图片需要阻塞线程的
http://www.cnblogs.com/lilinwei340/p/6474170.html
http://blog.csdn.net/u013378306/article/details/70156842
http://blog.csdn.net/mrlevo520/article/details/51840217
I'm fish. I'm on.
思路: 发送请求至http://qr.liantu.com获取二维码 保存本地 下载全部完成后 与本地背景图合成 最后使用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(ur'bg.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(ur'download\%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(ur'finally\%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)
很多东西是写死的 比如下载文件的路径 生成图片的路径 以及背景图名称
"""
第一次改进: 网络生成有毒 使用qrcode库去生成 调节了并发线程数量 达到加速的效果。 win8同级目录下6AJD.jpg 和 6AJd.jpg不能共存 ,注意这个坑
打包好的exe文件和说明已经上传到csdn上了 http://download.csdn.net/detail/cjvs9k/9917300
遇到一些问题
PIL安装 直接去官网下载exe文件 (本人win8系统)
多线程阻塞 资料不完整 导致 下载图片需要阻塞线程的
http://www.cnblogs.com/lilinwei340/p/6474170.html
http://blog.csdn.net/u013378306/article/details/70156842
http://blog.csdn.net/mrlevo520/article/details/51840217
I'm fish. I'm on.
相关文章推荐
- Qt学习笔记之——生成exe可执行文件并打包生成安装软件
- Java 批量生成二维码图片,并打包成可直接下载的zip包(spring boot)
- qt 官方生成exe打包文件——windeployqt
- iOS 打包程序生成 .ipa文件, 生成可内部测试的二维码(使用x-code7.0)
- 更换用installshield打包生成exe文件的图标
- windows下Android利用ant自动编译、修改配置文件、批量多渠道,打包生成apk文件
- 使用pyinstaller工具打包python项目代码生成exe文件
- 【tkinter】python工具pyinstaller打包生成exe文件非常大的原因分析(openpyxl)openpyxl
- linux(以ubuntu为例)下Android利用ant自动编译、修改配置文件、批量多渠道,打包生成apk文件
- 打包过程vs2010(包含卸载功能、生成一个exe文件)
- python生成ios固定代码模块脚本打包成exe文件
- vs打包生成的文件有:setup.msi,setup.exe 二者区别
- linux(以ubuntu为例)下Android利用ant自动编译、修改配置文件、批量多渠道,打包生成apk文件
- 【Python】爬图片,Py2exe打包成EXE,并用inno setup生成安装文件
- 利用Resgen.exe 批量生成resources文件
- java应用程序打包及生成exe文件
- 零基础写python爬虫之打包生成exe文件
- Android 自动编译、打包生成apk文件 4 - 多渠道批量打包
- android使用ant自动打包(更改java文件中的属性值,批量自动生成)
- python 将py脚本打包生成exe可执行文件