您现在的位置是:首页 > 文章详情

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

日期:2018-07-05点击:1037

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


0,起源

img_2dd890bcbe601aaee4b5930a333058f0.png
德莱文

img_9848bdb2168b1018cb94b5dc8d1930df.png
图片局部
img_892d387d62a6f298b823a1206d2eabaf.png
英雄联盟-微博

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

  • 运行环境:Python3.6.5 , pycharm-2018-1-2 , win10

img_ffbbe68d9c7a1cce07d362423765cdef.gif
愣着干嘛,快往下看

1.爬虫思路

  • 皮肤图片的来源问题,首先到官网去找了找,想到了道聚城皮肤专卖区,其中正好有所有我们需要的图片。
    img_38c7e377dd731ff3097706014faadd15.png
    皮肤图片来源
  • 通过F12锁定图片取得了第一张图片的URL,(https://game.gtimg.cn/images/daoju/app/lol/medium/2-122015-9.jpg
    img_7dff8340b0a503bed65ab22d9c6811d9.png
    取得URL
  • 以此类推便可取得多个皮肤的URL,发现只有图中红框处不同


    img_7fbf65778541fe1205d02ba8b32f0064.png
    URLS
  • 尝试这改变红框内的数字(玄学),在改变后三位(122015-->122001)时,获得了另一张诺手的皮肤,基本可以确定后三位为皮肤编号,前面的数字为英雄编号,且皮肤编号必须为三位,这一步得感谢这位博主,让我更加确定了这个规律的可行性。(这一步花了好久)
  • 看到这里你可能会有所疑问,为什么不直接正则获取所需图片的URL呢?为什么要大费周章的寻找规律?因为这个翻页式网站比较特殊,在翻页时URL并不会改变,所以无法通过常用方法获取所有皮肤,那估计又有人要提出使用selenium库来模拟人使用浏览器获取所有图片,但是这会造成爬取图片的速度大大下降,只能作为下策(在这过程中了解到了八爪鱼,发现其原理类似于selenium,是模拟人操控浏览器,速度也是不容直视,虽然它能爬取近98%的网站),在博主能力有限的情况下选择了寻找规律之旅!
    如果你有好的方法解决这个问题,可以在评论处提出,十分感谢!
  • 接下来在知道了规律的情况下,那么如何获取每个不同英雄的编号呢?在其他博主的引导下,发现LoL资料库中有所有英雄的头像,通过F12的慢慢查找,发现了这个js文件!
    img_4fb431934c117fa11f9f5a74c318020d.png
    Network

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

img_6aa5e0d4f42ebaa743a298c276783076.png
preview

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

2,代码框架

  • 1,获取英雄编号及皮肤编号(说明:关于皮肤编号并未找到每个英雄皮肤的数量,所以设置成查找所有001到015的图片,当然也可以更多020也行)
  • 2,将编号导入图片URL(https://game.gtimg.cn/images/daoju/app/lol/medium/2-******-9.jpg)中,生成Url_list。
  • 3,根据URL来下载对应图片,并保存到本地。

3,完整代码

img_5293d0c5aa412d202a99ffa158bfdf76.png
1
img_266413864d2e8e22ab29fa0fa37c1e7b.png
2

img_26ccd1dba1db5d03d60d102c8c80d467.png
爬取完成

代码写的比较丑,如有看不懂的部分可在评论区提出,我会秒回你的!/认真脸

好了,到这里我们已经完成了LOL全皮肤的获取,接下来进行最有意思的一步,千图成像!(文末有我爬取到的皮肤图集百度网盘地址)


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

软件下载地址

  • 如果打不开,那就搜索“foto-mosaik-edda”下载即可!
img_293e2862bfc65fea88f55dab3e6e858d.png
Windows用户请选这个

打开后界面是这样的。


img_ebece4aea2c15e4faa1b58ad15c057d7.png
第一步创建图库

先选第一步


img_aa36c229c1c86f92754a3179e7fd684a.png
1.1

img_d45f9b262c32d27203419e27da757f57.png
1.2

img_a07def702182bffaaa22d72c65e3791c.png
等待一会儿

再选第二步create photo mosaic
img_a2291bbbe961a1bb74b9fcedfba41d1a.png
2.1

img_5324fd97a5ffcdaaee3ceb324015bdce.png
2.2

img_e3f8c95fafb89dc38922d930395e6fc2.png
2.3

img_084de57eeeb804b6d371255d207da5e1.png
2.4

img_a5474d818ef04c86d377c6f9ae5d866e.png
2.5,弹出警告点确认

img_67dadb4385888c646493961220221655.jpe
效果图

img_fd6dca27be54410f9f3091891b71075a.png
局部

img_9efa3170e4d7cfab8dadfb0966cd935f.jpe
大吉大利,今晚吃鸡

有时间再分享如何用python实现这个软件的功能…………
如发现错误或看不懂的地方,可在评论区提出,大家一起交流!

如果苦于没有大量图片来进行成像,可到百度网盘下载我爬取到的皮肤图集,https://pan.baidu.com/s/19PywbOV1dBwr7r7bzsMhmw 密码:5arb

原文链接:https://yq.aliyun.com/articles/637518
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章