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

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


同步过程中可能图片无法查看,请访问原地址

 

0,起源

12115116-f9273e99b4643684.png

德莱文

 

12115116-46410d5d4bc6f59a.png

图片局部

12115116-1553e0c1e1b558c7.png

英雄联盟-微博

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

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

12115116-8511810a9111e1f9.gif

愣着干嘛,快往下看

1.爬虫思路

  • 皮肤图片当然是先在官网找喽,想到了道聚城皮肤专卖区,其中正好有所有我们需要的图片。

    12115116-bbb9fc4eaa19605e.png

    皮肤图片来源

  • 通过F12锁定图片取得了第一张图片的URL,(https://game.gtimg.cn/images/daoju/app/lol/medium/2-122015-9.jpg

    12115116-6fbf66c61458abec.png

    取得URL

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

     

    12115116-5c926266420975a6.png

    URLS

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

    12115116-a826bde11f4c62ed.png

    Network

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

12115116-f42cc59b81f24384.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,完整代码

12115116-8803691bd822195c.png

1

12115116-190d55c988ac3f86.png

2

 

12115116-6ea56dc3595744c3.png

爬取完成

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

好了,到这里我们已经完成了LOL全皮肤的获取,接下来进行最有意思的一步,千图成像!


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

软件下载地址

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

12115116-5093f4bf7f7b6ee4.png

Windows用户请选这个

 

打开后界面是这样的。

 

12115116-e2c02a8b2b3eeb51.png

第一步创建图库

 

先选第一步

 

12115116-62848559f6dd59e3.png

1.1

 

12115116-f9868123e6815daa.png

1.2

 

12115116-28f93a5d28daca31.png

等待一会儿


再选第二步create photo mosaic

12115116-048be54f3041bb35.png

2.1

 

12115116-2a31f6dcc90b23df.png

2.2

 

12115116-91ffa62e38d72b09.png

2.3

 

12115116-768c4c3a07a1fced.png

2.4

 

12115116-3b3a02237e880ec0.png

2.5,弹出警告点确认

 

12115116-cebf62f334da4200.jpg

效果图

 

12115116-3f73b625a4592c94.png

局部

 

12115116-6b27d6564cb268a6.jpg

大吉大利,今晚吃鸡


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

  • 7
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,这是一个很有趣的问题!首先,我们需要了解一些基本的Python库,例如requests, BeautifulSoup, PIL等。接下来,我们可以按照以下步骤实现千人成像: 1. 爬取图片:使用requests和BeautifulSoup库从网站上爬取图片,可以使用网站的API或者直接通过解析HTML来获取图片的链接。 2. 下载图片:使用requests库下载获取到的图片链接。 3. 图片处理:使用PIL库来处理图片,例如调整大小、裁剪、旋转等。 4. 图片合成:使用PIL库将处理过的图片合成成一张大图,可以按照一定的规律排列,例如按照行列数目来排列。 以下是一个简单的Python程序,可以实现从指定网站爬取图片并进行合成: ```python import requests from bs4 import BeautifulSoup from PIL import Image url = 'http://example.com/images/' response = requests.get(url) soup = BeautifulSoup(response.content, 'html.parser') # 获取所有图片链接 img_links = [img['src'] for img in soup.find_all('img')] # 下载并处理图片 imgs = [] for link in img_links: img = Image.open(requests.get(link, stream=True).raw) img = img.resize((100, 100)) # 调整图片大小 imgs.append(img) # 合成图片 width, height = imgs[0].size rows = 10 cols = 10 result = Image.new('RGB', (width*cols, height*rows)) for i in range(rows): for j in range(cols): result.paste(imgs[i*cols+j], (j*width, i*height)) # 保存结果 result.save('result.jpg') ``` 当然,这只是一个简单的例子,实际上实现千人成像需要考虑更多的因素,例如图片质量、合成算法等等。希望这个例子可以帮助你入门千人成像实现

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值