首頁>科技>

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

德萊文

圖片區域性

英雄聯盟-微博

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

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

愣著幹嘛,快往下看

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

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

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

檢視其preview,便可得到所有英雄編號,並測試發現可用!比如Ashe艾希的第一個面板對應編號按規律應該是22001,所以URL就是

https://game.gtimg.cn/images/daoju/app/lol/medium/2-22001-9.jpg

測試發現確實成功了!

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 requestsimport reimport osdef 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_listdef 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_listdef 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__': 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,初級階段我們先使用一款國外的合成軟體

軟體下載地址

Windows使用者請選這個

開啟後介面是這樣的。

第一步建立相簿

先選第一步

1.1

1.2

等待一會兒

再選第二步create photo mosaic

2.1

2.2

2.3

2.4

2.5,彈出警告點確認

效果圖

區域性

大吉大利,今晚吃雞

結尾

最後多說一句,小編是一名python開發工程師,這裡有我自己整理了一套最新的python系統學習教程,包括從基礎的python指令碼到web開發、爬蟲、資料分析、資料視覺化、機器學習等。想要這些資料的可以關注小編,並在後臺私信小編:“01”即可領取。

  • 整治雙十一購物亂象,國家再次出手!該跟這些套路說再見了
  • 華為海外AppGallery上架 Here WeGo 地圖,HMS服務成功任重而道遠