千图成像:用N张图拼凑一张图。实现原理:先将要成像的图片转换成马赛克图片,然后用图库中对应颜色的图片替换对应的色块。图库图像处理:在图库中标记每幅图像的混合颜色以替换目标色块,并记录每幅图像的特征进行成像,以提高成像质量。0、Origin\Delevingne图片部分英雄联盟-微博很久以前刷微博的时候看到这篇文章,被他震惊了。图片由LOL的近千张皮肤图组成(这难道是用ps我一张一张做的,应该不可能),昨天突然想起这件事,决定做一张,然后就开始做采取行动。找到这篇文章,看了看图片的构成,决定先把皮肤的图片全部搞定!然后爬虫又开始了!运行环境:Python3.6.5,pycharm-2018-1-2,win10,你在发呆干什么,赶紧往下看1.爬虫idea皮肤图片的来源,先去官网找,并想到了刀巨城皮肤专卖区,里面刚好有我们需要的图片。皮肤图片来源锁定F12获取第一张图片的网址,(https://game.gtimg.cn/images/daoju/app/lol/medium/2-122015-9.jpg)获取url等可以获取到多个皮肤的url,发现只有图中红框内的不同url。尝试更改红框内的数字(玄学),当更改后三位时(122015-->122001),又得到一个诺手的皮肤,基本可以确定后三位是皮肤编号,第一个数字是英雄编号,皮肤编号必须是三位数字。感谢博主这一步,让我更加确定了这个规则的可行性。(这一步用了很久)看到这里,你可能会有一些疑惑,为什么不直接获取想要的图片的URL呢?为什么要费心去寻找模式?因为这个翻页网站比较特殊,翻页的时候url是不会变的,所以不可能通过普通的方法得到所有的皮肤。估计会有人提出用selenium库来模拟人用浏览器获取所有图片,但是这样会大大降低抓取图片的速度,只能作为一个糟糕的策略(在此过程中,学习了octopus,发现它的原理和selenium类似,都是模拟人控制浏览器,速度不是直看的,虽然可以抓取接近98%的网站),在案例中能力有限的博主们,他们选择了寻找正规的旅程!如果大家有解决这个问题的好方法,可以在评论中提出,非常感谢!接下来,知道了规则,如何获取每个不同英雄的数量呢?在其他博主的指点下,我发现英雄联盟的数据库里有所有英雄的头像,通过F12的慢速搜索找到了这个js文件!网络查看其预览,可以获取所有英雄编号,测试一下发现可用!比如艾希的第一款皮肤对应的编号依法应该是22001,所以网址是https://game.gtimg.cn/images/daoju/app/lol/medium/2-22001-9.jpg,测试发现它确实有效!预览不错,至此网页分析结束,终于可以写代码了!*2,代码框1,获取英雄编号和皮肤编号(注:关于皮肤编号,没有查到每个英雄的皮肤编号,所以设置为搜索001到015的所有图片,当然,更多020也可以)2、将数字导入图片网址(https://game.gtimg.cn/images/daoju/app/lol/medium/2-******-9.jpg)生成Url\_list。3.根据网址下载相应的图片并保存到本地。*3、完整代码importrequestsimportreimportos################标题:获取LOL英雄皮肤图片##作者:简书Wayne_Dream##日期:2018-7-5##转载请注明出处!!!##############defgetHero_data():try:headers={'user-agent':'Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/67.0.3396.99Safari/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_encodingtext=r.texthero_id=re.findall(r'"id":"(.*?)","key"',text)hero_num=re.findall(r'"key":"(.*?)"',text)returnhero_id,hero_numexcept:return'卧槽,英雄代码获取失败!'defgetUrl(hero_num):part1='https://game.gtimg.cn/images/daoju/app/lol/medium/2-'part3='-9.jpg'skin_num=[]url_list=[]foriinrange(1,21):i=str(i)如果len(i)==1:i='00'+ieliflen(i)==2:i='0'+ielse:continueskin_num.append(i)forhninhero_num:forsninskin_num:part2=hn+snurl=part1+part2+part3Url_list.append(url)print('图片URL获取成功')returnUrl_listdefPicName(hero_id,path):pic_name_list=[]foridinhero_id:foriinrange(1,21):pic_name=path+id+str(i)+'.jpg'pic_name_list.append(pic_name)returnpic_name_listdef下载图片(pic_name_list,Url_list):count=0n=len(Url_list)try:foriinrange(n):headers={'user-agent':'Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/67.0.3396.99Safari/537.36'}res=requests.get(Url_list[i],headers=headers).content如果len(res)<100:count+=1print('\rcurrentprogress:{:.2f}%'.format(100*(count/n)),end='')else:withopen(pic_name_list[i],"wb")asf:f。write(res)count+=1print('\rCurrentprogress:{:.2f}%'.format(100*(count/n)),end='')except:return'妈的,获取图片失败!'if__name__=='__main__':print('作者:简书Wayne_Dream:')print('https://www.jianshu.com/u/6dd4484b4741')input('请输入任意字符开始爬取:')如果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、初期我们先用国外的合成软件。如果软件下载地址打不开,那就搜索“foto-mosaik-edda”下载吧!对于Windows用户,请选择此选项,界面将如下所示。第一步创建图库,先选择第一步1.11.2,稍等片刻,然后选择第二步创建照片马赛克2.12.22.32.42.5,会弹出一个警告点确认局部渲染上图,然后分享一下如何使用python实现这个软件的功能……如果大家发现错误或者有不懂的地方可以在评论区提出,一起交流!如果文章对你有帮助,点赞+关注,你的支持是我最大的动力
