sponsored links

Python完成英雄聯盟原話千圖成像,這也太酷了

千圖成像:用N張圖片拼湊成一張圖片。
實現原理:先將所要成像的圖片轉化成馬賽克圖片,然後從相簿中用對應顏色的圖片替換相應色塊。
相簿中的圖片處理:標記相簿中每張圖片的混合顏色,用於替換目標色塊,並記錄每張圖片的特徵用於成像,增加成像質量。


0,起源

Python完成英雄聯盟原話千圖成像,這也太酷了

\
德萊文

Python完成英雄聯盟原話千圖成像,這也太酷了

圖片區域性

Python完成英雄聯盟原話千圖成像,這也太酷了

英雄聯盟-微博

很久前在刷微博的時候看到了這條,被他給震撼到了,圖片是由LOL近千張面板圖片組合構成的(難道這是用ps做的,還是一張張拼的,應該不可能吧),就在昨天突然就想起了這個事,就決定也做一個,隨即便展開了行動。搜到了這篇文章,看了下圖片的構成,決定先取得所有面板的圖片再說吧!便又開始了爬蟲

執行環境:Python3.6.5 , pycharm-2018-1-2 , win10



Python完成英雄聯盟原話千圖成像,這也太酷了

愣著幹嘛,快往下看

1.爬蟲思路

  • 面板圖片的來源問題,首先到官網去找了找,想到了道聚城面板專賣區,其中正好有所有我們需要的圖片。

Python完成英雄聯盟原話千圖成像,這也太酷了

面板圖片來源
  • 透過F12鎖定圖片取得了第一張圖片的URL,(https://game.gtimg.cn/images/daoju/app/lol/medium/2-122015-9.jpg)

Python完成英雄聯盟原話千圖成像,這也太酷了

取得URL
  • 以此類推便可取得多個面板的URL,發現只有圖中紅框處不同

Python完成英雄聯盟原話千圖成像,這也太酷了

URLS
  • 嘗試這改變紅框內的數字(玄學),在改變後三位(122015-->122001)時,獲得了另一張諾手的面板,基本可以確定後三位為面板編號,前面的數字為英雄編號,且面板編號必須為三位,這一步得感謝這位博主,讓我更加確定了這個規律的可行性。(這一步花了好久)
  • 看到這裡你可能會有所疑問,為什麼不直接正則獲取所需圖片的URL呢?為什麼要大費周章的尋找規律?因為這個翻頁式網站比較特殊,在翻頁時URL並不會改變,所以無法透過常用方法獲取所有面板,那估計又有人要提出使用selenium庫來模擬人使用瀏覽器獲取所有圖片,但是這會造成爬取圖片的速度大大下降,只能作為下策(在這過程中瞭解到了八爪魚,發現其原理類似於selenium,是模擬人操控瀏覽器,速度也是不容直視,雖然它能爬取近98%的網站),在博主能力有限的情況下選擇了尋找規律之旅!
    如果你有好的方法解決這個問題,可以在評論處提出,十分感謝!
  • 接下來在知道了規律的情況下,那麼如何獲取每個不同英雄的編號呢?在其他博主的引導下,發現LoL資料庫中有所有英雄的頭像,透過F12的慢慢查詢,發現了這個js檔案!

Python完成英雄聯盟原話千圖成像,這也太酷了

Network

檢視其preview,便可得到所有英雄編號,並測試發現可用!比如Ashe艾希的第一個面板對應編號按規律應該是22001,所以URL就是https://game.gtimg.cn/images/daoju/app/lol/medium/2-22001-9.jpg,測試發現確實成功了!

Python完成英雄聯盟原話千圖成像,這也太酷了

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,完整程式碼

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,初級階段我們先使用一款國外的合成軟體

軟體下載地址

  • 如果打不開,那就搜尋“foto-mosaik-edda”下載即可!

Python完成英雄聯盟原話千圖成像,這也太酷了

Windows使用者請選這個

開啟後介面是這樣的。

Python完成英雄聯盟原話千圖成像,這也太酷了

第一步建立相簿

先選第一步

Python完成英雄聯盟原話千圖成像,這也太酷了

1.1

Python完成英雄聯盟原話千圖成像,這也太酷了

1.2

Python完成英雄聯盟原話千圖成像,這也太酷了

等待一會兒

再選第二步create photo mosaic

Python完成英雄聯盟原話千圖成像,這也太酷了

2.1

Python完成英雄聯盟原話千圖成像,這也太酷了

2.2

Python完成英雄聯盟原話千圖成像,這也太酷了

2.3

Python完成英雄聯盟原話千圖成像,這也太酷了

2.4

Python完成英雄聯盟原話千圖成像,這也太酷了

2.5,彈出警告點確認

Python完成英雄聯盟原話千圖成像,這也太酷了

效果圖

Python完成英雄聯盟原話千圖成像,這也太酷了

區域性



有時間再分享如何用python實現這個軟體的功能…………
如發現錯誤或看不懂的地方,可在評論區提出,大家一起交流!

如果文章對您有幫助,點贊+關注,您的支援是我最大的動力

分類: 體育
時間: 2021-12-19

相關文章

西甲今日頭版:巴薩冬窗優先目標斯特林 阿扎爾能否首發是未知數

西甲今日頭版:巴薩冬窗優先目標斯特林 阿扎爾能否首發是未知數
熱愛西甲,關注伊比利亞半島頭條,一起來瀏覽今日各大西班牙報紙的頭版訊息. <馬卡報>: 1."72小時內的挑戰",當地時間今天16:15,馬競將在本輪西甲聯賽中主場迎戰 ...

皇馬冬窗必補一空缺?5人名單曝光:5000萬國腳領銜 兩大頂級在列

皇馬冬窗必補一空缺?5人名單曝光:5000萬國腳領銜 兩大頂級在列
日前,據西班牙<fichajes>報道,由於主帥安切洛蒂的要求,皇馬正在尋求新的中衛人選,而主席弗洛倫蒂諾的名單中有5名球員,其中最可能實現的是呂迪格和金特爾,巴黎聖日耳曼隊長馬爾基尼奧斯 ...

皇馬新C羅,不能連續踢二場比賽?安切洛蒂:這是個問題

皇馬新C羅,不能連續踢二場比賽?安切洛蒂:這是個問題
9月19日報道,週六皇馬主帥安切洛蒂出席了新聞釋出會,面對即將到來的比賽,安切洛蒂回答了了相關問題,不過面對阿扎爾,安帥顯得有些無奈. 安切洛蒂表示:"阿扎爾昨天已經感覺不適,他的身體恢復了 ...

再挖小將?皇馬尋金球替身瞄準4000萬天才 曾是哈蘭德黃金搭檔

再挖小將?皇馬尋金球替身瞄準4000萬天才 曾是哈蘭德黃金搭檔
日前,據西班牙<足球先生>報道,皇馬正在關注萊比錫的匈牙利中場多米尼克·索博斯萊伊(Dominik Szoboszlai),他如今的表現讓皇馬將他視為未來的引援目標,如果冬窗無法簽下他,那 ...

客場絕殺 找到vini的說明書的安帥開啟皇馬真正的青春風暴

客場絕殺 找到vini的說明書的安帥開啟皇馬真正的青春風暴
此次做客梅斯塔莉亞球場,不僅僅是主帥安切洛蒂執教800場比賽的記錄之戰,更是安帥在1415賽季被終結22 連勝後重返梅斯塔莉亞,不知道安帥的內心是否想起那年正是輸給瓦倫西亞之後皇馬由於傷病導致多線崩盤 ...

OB侃球:皇馬悲傷了,貝爾再一次受傷了,“玻璃人”何時會好?

OB侃球:皇馬悲傷了,貝爾再一次受傷了,“玻璃人”何時會好?
就在最近一段時間裡面,皇馬又要繼續的鬱悶了.原本皇馬隊引進了一個非常重要的球員,貝爾.可是他們怎麼樣也沒想到,這一個球員竟然成為了他們的一個噩夢.因為這個球員是一個非常典型的玻璃人,在平時比賽的過程當 ...

重磅!皇馬做出重大決定:將17冠功勳無情清洗,球迷唏噓聲一片

重磅!皇馬做出重大決定:將17冠功勳無情清洗,球迷唏噓聲一片
北京時間9月18日,西甲聯賽傳來重磅訊息,據西班牙媒體<Defensa Central>報道,皇馬想早點甩掉伊斯科,他們正在考慮在冬季轉會窗出租西班牙中場,之後再讓球員明夏自由轉會離隊. ...

從0-1輸給皇馬,到6-1大勝,意甲中資豪門不敗登頂,22年神蹟誕生

從0-1輸給皇馬,到6-1大勝,意甲中資豪門不敗登頂,22年神蹟誕生
北京時間9月19日0點,意甲第4輪的一場比賽展開爭奪,中資豪門國際米蘭在主場迎戰博洛尼亞.國際米蘭前3輪比賽取得2勝1平的不敗戰績.首輪聯賽國際米蘭4-0大勝熱那亞.隨後,國際米蘭在客場3-1擊敗了維 ...

西甲最新積分榜:武磊低迷西班牙人5場不勝,皇馬逆轉,巴薩第10

西甲最新積分榜:武磊低迷西班牙人5場不勝,皇馬逆轉,巴薩第10
北京時間9月19日晚至20日凌晨,西甲進行了多場比賽的較量.馬略卡在主場和比利亞雷亞爾0-0悶平,雙方總共23次射門都沒能轉化為1粒進球,比利亞雷亞爾遭遇4連平.皇家社會和塞維利亞也是踢成0-0平手, ...

德轉:西甲球隊身價前五,馬競超越巴薩排名次席,皇馬榜首

德轉:西甲球隊身價前五,馬競超越巴薩排名次席,皇馬榜首
德國轉會市場日前更新了西甲聯賽球隊身價,馬競憑藉格里茲曼的迴歸,超越巴薩排名次席,皇馬榜首. 附各隊身價最高球員.(單位:歐元) 1.皇馬,7.83億→卡塞米羅(7000萬) 2.馬競,7.55億→略 ...

維尼修斯的腳已開光,不僅創造了個人紀錄,而且還為皇馬打破歷史

維尼修斯的腳已開光,不僅創造了個人紀錄,而且還為皇馬打破歷史
對於皇馬來說梅斯塔利亞球場像極了他們的噩夢,在這個球場比賽,皇馬總是有吃不完的苦頭.凌晨的這場比賽依然如此,被對手先進一球后,直到最後時刻依靠相差13歲的"哥倆"才將比分逆轉.而本 ...

塞爾電臺:阿森西奧對現狀不滿,如無變化不排除離隊
虎撲09月21日訊 在今天凌晨的節目中,塞爾電臺的兩位皇馬跟隊記者Anton Meana和Javier Herreaz透露了關於阿森西奧的情況. Anton Meana表示:"阿森西奧確實出 ...

逗妹吐槽:原來梅西也害怕房東漲房租啊

逗妹吐槽:原來梅西也害怕房東漲房租啊
太陽報:梅西看上巴黎一處4100萬鎊豪宅,佔地2000平建於1899年 <太陽報>稱,梅西和他的家人渴望在巴黎找到一個永久住所,據悉,安東內拉現在的關注點是蘇富比拍賣的一座標價4100萬鎊 ...

早知道 | 尤文圖斯創60年最差開局

早知道 | 尤文圖斯創60年最差開局
北京時間20日凌晨,本賽季意第4輪一場焦點戰,尤文圖斯主場1比1戰平AC米蘭,前4輪未嘗勝績,追平了本隊60年來最差開局,並跌進降級區.尤文前4輪收穫2平2負,1961年前4輪同樣只拿到2分. 這也是 ...

金童淪落,30歲無球可踢

金童淪落,30歲無球可踢
9月下旬,英超漸入佳境.但此時,埃弗頓最知名的球星哈梅斯·羅德里格斯目前並不在隊中. J羅的經紀人最近一直在卡達和阿聯酋活動,希望找到合適的新東家.在徵得埃弗頓同意後,他已經動身前往阿聯酋.有媒體透露 ...

病急亂投醫!1.5億先生4場0球,列維向曼城低頭,熱刺滿盤皆輸

病急亂投醫!1.5億先生4場0球,列維向曼城低頭,熱刺滿盤皆輸
今年夏天,曼城追逐了一個賽季的凱恩並沒有來到伊蒂哈德球場,瓜迪奧拉也不得不以無正規中鋒的陣容開始了新賽季.在聯賽首輪與托特納姆熱刺的直接較量中,曼城就因為鋒線無力吃了大虧,他們在幾乎掌握了全場節奏的情 ...

納斯里退役:87一代15名法國天才球員現狀調查

納斯里退役:87一代15名法國天才球員現狀調查
隨著夏窗還與西班牙人曾傳出緋聞的薩米爾-納斯里的退役,標誌著法國87一代的球員逐漸在退出足壇的開始.在2007年,這一代球員是20歲上下的希望之星,時間一晃就是將近15年過去,這些人也已經職業生涯接近 ...

心疼!11名中國球員滯留海外,離家91天未歸,足協毫無辦法

心疼!11名中國球員滯留海外,離家91天未歸,足協毫無辦法
在中超聯賽停擺.國足征戰世預賽之際,中國足球關注的焦點,都在國足能否在12強賽取得好成績.而令人感到意外的是,目前還有一批中國球員,與國足一樣呆在海外,這就是北京國安青年隊的11名球員.由於航班被中斷 ...

再見廣州隊!曝韋世豪嚴鼎皓留洋葡甲,阿蘭去國安,廖力生去泰山

再見廣州隊!曝韋世豪嚴鼎皓留洋葡甲,阿蘭去國安,廖力生去泰山
在過去的1個月,廣州隊可謂是經歷了水深火熱!根據足球報記者蔡宗霖的報道,已經有不少球隊盯上了廣州隊陣中的個別球員,想要趁著廣州隊現在的糟糕形勢,將這些高水平的球員帶走!說實話,這個策略是正確的,廣州隊 ...

曼聯虧損淨9220萬英鎊!營收虧損3690萬英鎊,而這還是豪門翹楚

曼聯虧損淨9220萬英鎊!營收虧損3690萬英鎊,而這還是豪門翹楚
曼聯CEO伍德沃德公佈曼聯上賽季財報資料,俱樂部淨虧損額達到9220萬英鎊,這個資料是19-20賽季(2320萬英鎊)的三倍.其中營收虧損3690萬英鎊,佔據大頭的是非現金稅收費用6660萬英鎊.但好 ...