千图成像:用N张图片拼凑成一张图片。undefined实现原理:先将所要成像的图片转化成马赛克图片,然后从图库中用对应颜色的图片替换相应色块。undefined图库中的图片处理:标记图库中每张图片的混合颜色,用于替换目标色块,并记录每张图片的特征用于成像,增加成像质量。
0,起源
德莱文
图片局部
英雄联盟-微博
很久前在刷微博的时候看到了这条,被他给震撼到了,图片是由LOL近千张皮肤图片组合构成的(难道这是用ps做的,还是一张张拼的,应该不可能吧),就在昨天突然就想起了这个事,就决定也做一个,随即便展开了行动。搜到了这篇文章,看了下图片的构成,决定先取得所有皮肤的图片再说吧!便又开始了爬虫!
运行环境:Python3.6.5 , pycharm-2018-1-2 , win10
愣着干嘛,快往下看
1.爬虫思路
皮肤图片来源
取得URL
URLS
selenium
库来模拟人使用浏览器获取所有图片,但是这会造成爬取图片的速度大大下降,只能作为下策(在这过程中了解到了八爪鱼,发现其原理类似于selenium,是模拟人操控浏览器,速度也是不容直视,虽然它能爬取近98%的网站),在博主能力有限的情况下选择了寻找规律之旅!undefined如果你有好的方法解决这个问题,可以在评论处提出,十分感谢!Network
查看其preview,便可得到所有英雄编号,并测试发现可用!比如Ashe艾希的第一个皮肤对应编号按规律应该是22001,所以URL就是,测试发现确实成功了!
preview
2,代码框架
3,完整代码
import requests
import re
import os
# # # # # # # # # # # # # #
# title:获取LOL英雄皮肤图像 #
# author:简书 Wayne_Dream #
# date:2018-7-5 #
# 转载请注明出处!!! #
# # # # # # # # # # # # # #
def getHero_data():
try:
headers = {
'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}
url = 'http://lol.qq.com/biz/hero/champion.js'
r = requests.get(url, headers=headers)
r.raise_for_status()
r.encoding = r.apparent_encoding
text = r.text
hero_id = re.findall(r'"id":"(.*?)","key"', text)
hero_num = re.findall(r'"key":"(.*?)"', text)
return hero_id, hero_num
except:
return '卧槽,获取英雄编码失败!'
def getUrl(hero_num):
part1 = 'https://game.gtimg.cn/images/daoju/app/lol/medium/2-'
part3 = '-9.jpg'
skin_num = []
Url_list = []
for i in range(1, 21):
i = str(i)
if len(i) == 1:
i = '00'+i
elif len(i) == 2:
i = '0'+i
else:
continue
skin_num.append(i)
for hn in hero_num:
for sn in skin_num:
part2 = hn + sn
url = part1 + part2 + part3
Url_list.append(url)
print('图片URL获取成功')
return Url_list
def PicName(hero_id, path):
pic_name_list = []
for id in hero_id:
for i in range(1, 21):
pic_name = path + id + str(i) + '.jpg'
pic_name_list.append(pic_name)
return pic_name_list
def DownloadPic(pic_name_list, Url_list):
count = 0
n = len(Url_list)
try:
for i in range(n):
headers = {
'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}
res = requests.get(Url_list[i], headers=headers).content
if len(res) < 100:
count += 1
print('\r当前进度:{:.2f}%'.format(100*(count/n)), end='')
else:
with open(pic_name_list[i], "wb") as f:
f.write(res)
count += 1
print('\r当前进度:{:.2f}%'.format(100*(count/n)), end='')
except:
return '卧槽,获取图片失败!'
if __name__ == '__main__':
print('author:简书 Wayne_Dream:')
print('https://www.jianshu.com/u/6dd4484b4741')
input('请输入任意字符开始爬虫:')
if os.path.exists('D:\LOLimg_wayne\\') == False:
path = r'D:\LOLimg_wayne\\'
os.mkdir(path)
hero_id, hero_num = getHero_data()
Url_list = getUrl(hero_num)
pic_name_list = PicName(hero_id, path)
print('正在下载图片,请稍等。。。')
print('在' + path + '下查看...')
DownloadPic(pic_name_list, Url_list)
print('图片下载完毕')
else:
path = r'D:\LOLimg_wayne\\'
hero_id, hero_num = getHero_data()
Url_list = getUrl(hero_num)
pic_name_list = PicName(hero_id, path)
print('正在下载图片,请稍等。。。')
print('在' + path + '下查看...')
DownloadPic(pic_name_list, Url_list)
print('图片下载完毕')
代码写的比较丑,如有看不懂的部分可在评论区提出,我会秒回你的!/认真脸
好了,到这里我们已经完成了LOL全皮肤的获取,接下来进行最有意思的一步,千图成像!(文末有我爬取到的皮肤图集百度网盘地址)
4,初级阶段我们先使用一款国外的合成软件
Windows用户请选这个
打开后界面是这样的。
第一步创建图库
先选第一步
1.1
1.2
等待一会儿
再选第二步create photo mosaic
2.1
2.2
2.3
2.4
2.5,弹出警告点确认
效果图
局部
有时间再分享如何用python实现这个软件的功能…………
如发现错误或看不懂的地方,可在评论区提出,大家一起交流!\
如果文章对您有帮助,点赞+关注,您的支持是我最大的动力
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。