天天看點

元旦C位出道,用微信好友頭像拼個中國地圖吧!

幾天前中秋節的時候用微信好友頭像加生成祝福文字,當時用 Python 代碼來實作時,采用的思路是結合微信好友頭像和點陣字,弄成頭像拼字。

    馬上就元旦了,我們把素材換一下,搞一個新玩法:準備用好友頭像拼接成背景圖,用中間透明的中國地圖加以覆寫,即可生成一個酷炫的照片地圖。

話不多說,效果如下:

元旦C位出道,用微信好友頭像拼個中國地圖吧!
(圖檔展示原因,未能顯示島嶼等細節)

整體思路是這樣嬸兒的

  • 擷取所有微信好友頭像
  • 準備一張透明的中國地圖
  • 把微信好友頭像作成照片牆
  • 黏合照片牆和透明地圖即可

擷取好友頭像

    這個我在之前用微信好友頭像生成漢字時已經做好了、直接拿過來用即可。

    如果你不知道怎麼擷取微信好友頭像、請移步到下面:裡面有詳細的擷取微信好友頭像的說明。

用微信好友頭像生成祝福文字,你就是朋友圈最靓的仔

準備中國地圖輪廓素材

    原理比較簡單,實作起來也不複雜,最最重要的是擷取中間透明的地圖輪廓圖檔。我們直接在網上下載下傳一個中國輪廓透明地圖:

元旦C位出道,用微信好友頭像拼個中國地圖吧!

拼接圖檔牆

    我們用微信好友頭像拼接成一張大的圖檔牆,如果你願意也可以自己PS一下。

元旦C位出道,用微信好友頭像拼個中國地圖吧!

    不過我們這裡用Python裡面的 PIL 圖檔處理子產品來操作,主要是将小圖拼接成與地圖輪廓圖同等大小的背景圖(圖檔牆):

代碼如下:

def combine_pic(folder,unit_size):
    """用圖檔生成一張地圖大小的照片牆
    """
    # 讀取地圖輪廓圖
    img = Image.open("ChinaMap.png")

    w,h = img.size
    #建立與主圖一樣大的白色底圖
    new_img = Image.new('RGB',(w,h),'#FFFFFF')

    #根據小格尺寸,計算大圖可容納小圖數量
    y_index = h//unit_size
    x_index = w//unit_size

    pic_list = []
    for item in os.listdir(folder):
        #對檔案夾中的 jpg 圖檔格式篩選
        if item.endswith(".jpg") or item.endswith(".jpeg") :
            pic_list.append(item)

    #擷取素材圖檔數目
    total = len(pic_list)
    x=0
    y=0

    for i in range(x_index*y_index):
        #列印目前進度
        print(f"目前進度{i}/{x_index*y_index}")
        try:
            # 對素材圖縮放至小格大小
            test = Image.open(f"{folder}/" + pic_list[i%total]).resize((unit_size,unit_size), Image.ANTIALIAS)
        except IOError:
            print("圖檔讀取失敗,跳過該圖檔")  # 圖檔會讀取失敗
            continue

        #将縮放成小格的素材圖按順序貼到白色底圖上
        new_img.paste(test,(x*unit_size,y*unit_size))
        x+=1
        if x==x_index:
            x=0
            y+=1

    print("照片牆合成完畢")
    #儲存照片牆
    new_img.save("PhotoWall.jpg",quality=100)
    paste_map() #調用地圖合成函數      

地圖輪廓貼圖

    到目前為止我們就有了2張圖檔,一張透明的中國地圖,以及一張用微信好友頭像拼接的圖檔牆。

    有了圖檔牆以及要覆寫在上面的地圖輪廓圖,隻要将輪廓圖貼在圖檔牆上即可收工。

def paste_map():
    """用透明地圖覆寫頭像圖檔
    """
    #讀取合成後的素材圖
    src1 = Image.open("PhotoWall.jpg")

    #讀取地圖輪廓圖
    src2 = Image.open("ChinaMap.png")

    src1.paste(src2,(0,0),src2)

    savename = "result{}.png".format(unit_size)
    src1.save(savename)
    print("頭像地圖制作完畢!")
    os.system('pause')  #手動退出提示      
元旦C位出道,用微信好友頭像拼個中國地圖吧!

整體流程隻需要4個步驟;

  • 準備好圖檔(微信好友頭像)
  • 用圖檔生成一張圖檔牆
  • 準備一張透明的地圖
  • 将圖檔牆和地圖整合

完整代碼:

https://github.com/huaisha1224/Python-Example      

注意事項

  • 由于圖檔牆和地圖黏合時多出來的部分會被透明處理,是以會看不到
  • 生成圖檔牆的時候請根據頭像數量多嘗試小圖大小