千图成像:用N张图片拼凑成一张图片。

实现原理:先将所要成像的图片转化成马赛克图片,然后从图库中用对应颜色的图片替换相应色块。

图库中的图片处理:标记图库中每张图片的混合颜色,用于替换目标色块,并记录每张图片的特征用于成像,增加成像质量。

起源

德莱文

图片局部

英雄联盟-微博

很久前在刷微博的时候看到了这条,被他给震撼到了,图片是由LOL近千张皮肤图片组合构成的(难道这是用ps做的,还是一张张拼的,应该不可能吧),就在昨天突然就想起了这个事,就决定也做一个,随即便展开了行动。

搜到了这篇文章,看了下图片的构成,决定先取得所有皮肤的图片再说吧!便又开始了爬虫!

运行环境:

Python3.6.5 , pycharm-2018-1-2 , win10

爬虫思路

皮肤图片的来源问题,首先到官网去找了找,想到了道聚城皮肤专卖区,其中正好有所有我们需要的图片。

以此类推便可取得多个皮肤的URL,发现只有图中红框处不同

尝试着改变红框内的数字,在改变后三位(122015-->122001)时,获得了另一张诺手的皮肤,基本可以确定后三位为皮肤编号,前面的数字为英雄编号,且皮肤编号必须为三位。

看到这里你可能会有所疑问,为什么不直接正则获取所需图片的URL呢?为什么要大费周章的寻找规律?

因为这个翻页式网站比较特殊,在翻页时URL并不会改变,所以无法通过常用方法获取所有皮肤。

那估计又有人要提出使用selenium库来模拟人使用浏览器获取所有图片,但是这会造成爬取图片的速度大大下降,只能作为下策(在这过程中了解到了八爪鱼,发现其原理类似于selenium,是模拟人操控浏览器,速度也是不容直视,虽然它能爬取近98%的网站),在博主能力有限的情况下选择了寻找规律之旅!

如果你有好的方法解决这个问题,可以在评论处提出,十分感谢!

接下来在知道了规律的情况下,那么如何获取每个不同英雄的编号呢?在其他博主的引导下,发现LoL资料库中有所有英雄的头像,通过F12的慢慢查找,发现了这个js文件!

查看其preview,便可得到所有英雄编号,并测试发现可用!比如Ashe艾希的第一个皮肤对应编号按规律应该是22001,所以URL就是https://game.gtimg.cn/images/daoju/app/lol/medium/2-22001-9.jpg,

测试发现确实成功了!

好了,到此为止网页分析到此结束了,终于可以编写代码了。

代码框架

1、获取英雄编号及皮肤编号(说明:关于皮肤编号并未找到每个英雄皮肤的数量,所以设置成查找所有001到015的图片,当然也可以更多020也行)

3,根据URL来下载对应图片,并保存到本地。

完整代码

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全皮肤的获取,接下来进行最有意思的一步,千图成像!

初级阶段我们先使用一款国外的合成软件

软件下载地址:

如果打不开,那就搜索“foto-mosaik-edda”下载即可!

打开后界面是这样的。

先选第一步

再选第二步create photo mosaic

效果图

局部

文源网络,仅供学习之用,侵删。

在学习Python的道路上肯定会遇见困难,别慌,我这里有一套学习资料,包含40+本电子书,800+个教学视频,涉及Python基础、爬虫、框架、数据分析、机器学习等,不怕你学不会!

https://shimo.im/docs/JWCghr8prjCVCxxK/ 《Python学习资料》

关注公众号【Python圈子】,优质文章每日送达。

python千人成像_Python实现千图成像:从图片爬取到图片合成相关推荐

  1. 爬取千库网ppt_初学Python-只需4步,爬取网站图片(附py文件)

    很多人学习Python很重要的一个原因是,可以很简单的把一个网站的数据爬下来. 尤其是做我们这一行,产品经理,电商行业. 领导:弄一个买卖游戏周边商品的交易APP出来. 我:行,那我们卖什么呀? 领导 ...

  2. python 爬取图片_Python实现千图成像:从图片爬取到图片合成

    千图成像:用N张图片拼凑成一张图片. 实现原理:先将所要成像的图片转化成马赛克图片,然后从图库中用对应颜色的图片替换相应色块. 图库中的图片处理:标记图库中每张图片的混合颜色,用于替换目标色块,并记录 ...

  3. python 透明图片合成_Python实现千图成像:从图片爬取到图片合成

    千图成像:用N张图片拼凑成一张图片. 实现原理:先将所要成像的图片转化成马赛克图片,然后从图库中用对应颜色的图片替换相应色块. 图库中的图片处理:标记图库中每张图片的混合颜色,用于替换目标色块,并记录 ...

  4. Python---如何实现千图成像:初级篇(从图片爬取到图片合成)

    千图成像:用N张图片拼凑成一张图片. 实现原理:先将所要成像的图片转化成马赛克图片,然后从图库中用对应颜色的图片替换相应色块. 图库中的图片处理:标记图库中每张图片的混合颜色,用于替换目标色块,并记录 ...

  5. python爬虫经典段子_Python爬虫实战(1):爬取糗事百科段子

    大家好,前面入门已经说了那么多基础知识了,下面我们做几个实战项目来挑战一下吧.那么这次为大家带来,Python爬取糗事百科的小段子的例子. 首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把 ...

  6. 知乎python练手的_Python—爬虫之初级实战项目:爬取知乎任一作者的文章练手

    爬虫之初级实战项目:爬取知乎任一作者的文章练手 在正式上代码之前,先过一遍之前所学知识的框架内容,温故而知新!!! 接下来我们直接上代码,一定要手敲代码.手敲代码.手敲代码!!! import req ...

  7. python爬虫大众点评_python爬虫——按城市及店铺面爬取大众点评分类

    题外话:因为最近遇到很多标签要对其进行分类,其中很多是店铺名,所以就想爬取大众点评的分类信息.因为不是专门做爬虫的,所以下面这段代码仅仅是可以实现要求,如何能避免网站的反爬机制这一点就无能无力了.另外 ...

  8. python爬虫网络数据包_Python爬虫之多线程图虫网数据爬取(十六)

    Python爬虫之多线程图虫网数据爬取(十六) 发布时间:2019-05-14 10:11, 浏览次数:289 , 标签: Python 原创不易,转载前请注明博主的链接地址:Blessy_Zhu h ...

  9. python爬图片_Python爬虫:彼岸图网图片爬取-Go语言中文社区

    杂 哈哈,这是我第一篇博客 半年以后回来再看发现这代码简直太难看了 现在已经弃用大小驼峰转蛇形命名了 确实好看 除了命名别的也写的不怎么样 因为爬虫只是个爱好所以也不准备再投入时间重构了 将就着看吧 ...

最新文章

  1. linux下c中嵌套正则表达式
  2. Ext.grid.Panel表格分页
  3. Android Keystore/keymaster的错误码
  4. 使用powershell一次性创建用户,OU及组
  5. 【数据结构与算法】之深入解析“组合总和Ⅳ”的求解思路与算法示例
  6. DAVINCI开发原理之三----达芬奇编解码引擎Codec Engine(CE)
  7. 谨慎使用Hibernate中的本机SQL
  8. linux中c语言常用内嵌汇编
  9. Silverlight 数据库 - Silverlight Database
  10. shared_ptr,weak_ptr使用最广范的智能指针
  11. 12、常见Conditional注解源码解析-ConditionalOnBean(写作中...)
  12. Factorization Machine 1
  13. 【NER】NLP-入门实体命名识别(NER)+Bilstm-CRF模型原理Pytorch代码详解——最全攻略...
  14. 动态规划精卫填海之路
  15. IIS——asp上传文件大小限制
  16. Log4Cpp 使用实例
  17. 基于itil的it运维管理体系
  18. read.html5.qq.com,从QQ浏览器缓存文件中提取出完整的视频
  19. lastwinner分红系统开发
  20. 整车行业 SAP APO 开发备忘(刘欣)

热门文章

  1. python以追加方式打开文件 线程安全吗_多线程追加文件,不加锁,会出现什么情况 ?...
  2. 将任何变量的值进行二进制输出的方法
  3. python连乘函数_Python常用的几种常用的内置函数
  4. pe安装usb3.0驱动_微PE工具箱v2.1版
  5. c++获取输入数字的位数/获取位数并且将其存入数组中/获取位数存入数组并且利用它解决实际问题
  6. python对文件的处理_python文件处理fileinput使用方法详解
  7. oracle导入大量csv_Oracle导入数据到表(支持插入大量数据)
  8. vue 图片复制黏贴上传_# quill-image-extend-module :完成vue-quill-editor图片上传,复制粘贴,拖拽...
  9. 腾讯云linux服务器怎么使用图形化界面_winscp使用方法,winscp使用方法详细说明...
  10. interface not supported怎么解决_这20个婚礼伴手礼,怎么看都比喜糖有创意!