1. 進入環境,下載下傳附件
打開發現是一個細長又不粗的細線,特麼的啥都看不清,放入photoshop中放大看看,如圖:
我們嘗試挪動四個幀,看看有啥變化,如圖:
2. 問題分析
可以看到這些幀可以合成一張圖,那麼圖中肯定暗含玄機,我們應該想辦法搞到合成圖,讓每一幀圖檔組合起來,直接上代碼:
from PIL import Image
import os
def get_gif_frame(gif_location):
"""
将gif每一幀抽取出來
:param gif_location: gif的檔案路徑
:return: PIL圖像對象和current指針
"""
im = Image.open(gif_location)
while True:
current = im.tell()
im.save('prtemp/res/' + str(current) + '.png')
# 為什麼-1,是放置檔案指針便利到最後一個,+1後空對象
if current < im.n_frames - 1:
im.seek(current + 1)
else:
break
return im, current
def image_compose(im, current):
"""
将每一幀圖檔組合,得到最終的圖檔
:param im: PIL圖像對象
:param current: current指針,為了确定畫布的寬度
:return: 得到最終合成圖
"""
to_image = Image.new('RGB', (im.size[0] * current, im.size[1])) # 建立一個新圖
# 循環周遊,把每張圖檔按順序粘貼到對應位置上
flag = 0
for name in img_list:
ph = Image.open('./prtemp/res/' + name)
to_image.paste(ph, (flag, 0))
flag += im.size[0]
return to_image.save('./prtemp/result.png') # 儲存新圖
im, current = get_gif_frame("prtemp/9266eadf353d4ada94ededaeb96d0c50.gif")
# 得到圖檔的檔案序,防止粘貼圖檔時候拼錯
img_list = os.listdir('./prtemp/res')
img_list.sort(key=lambda x: int(x[:-4])) # 得到幀檔案的檔案順序
image_compose(im, current)
執行完函數後,結果如圖: