使用pil读取gif图有些位置为黑色_使用 Pillow 快速创建 GIF 动图
后臺回復【入門資料】
送你十本Python電子書
之前有篇推文分享了如何在 Matplotlib 中生成 GIF 可視化圖表,有一定的限制。本文將介紹如何用 Pillow 創建 GIF,可以將任意多張圖片組合在一起,成為一張可播放的 GIF 圖。
這種方式的適用場景更多,而且 PyPI 上也沒有專門的庫可以生成 GIF,所以推薦大家收藏本文的代碼。
什么是 GIF 圖?
GIF(“圖形交換格式”)是一種位圖圖像格式,于1987年開發。
GIF基本上是一系列具有不同設置的圖像,例如:
循環播放
每幀的持續時間(圖片)
其他…
GIF 也可以是靜態圖像。
Pillow
Pillow 是 Python 圖形處理庫 PIL 的一個分支,引入了許多更改和增強功能,以使API易于使用或處理更多圖像格式和要求。支持打開、處理和保存多種不同格式的圖片文件。
利用 Python 生成 GIF
安裝 Pillow
第一步,我們需要先安裝 Pillow:
pip install Pillow
生成 GIF
我們生成一張紅球往下墜落的 GIF 動圖,作為文章示例。
首先,編寫一個函數,利用 Pillow 在一張圖片上畫一個紅球。
fromPILimportImage,ImageDraw
defcreate_image_with_ball(width, height, ball_x, ball_y, ball_size):
img = Image.new('RGB', (width, height), (255,255,255))
draw = ImageDraw.Draw(img)
# draw.ellipse takes a 4-tuple (x0, y0, x1, y1) where (x0, y0) is the top-left bound of the box
# and (x1, y1) is the lower-right bound of the box.
draw.ellipse((ball_x, ball_y, ball_x + ball_size, ball_y + ball_size), fill='red')
returnimg
上述代碼中,我們使用 Image.new創建了一張 RGB 圖片,并設置背景為白色,指定了圖片大小。
接著,通過 ImageDraw在圖片中的指定參數位置,畫了一個紅色的圓圈。
所以,我們要做的就是創建多張圖片,不斷讓紅球往下墜。
# Create the frames
frames =
x, y = 0,0
foriinrange(10):
new_frame = create_image_with_ball(400,400, x, y,40)
frames.append(new_frame)
x += 40
y += 40
# Save into a GIF file that loops forever
frames[0].save('moving_ball.gif', format='GIF', append_images=frames[1:], save_all=True, duration=100, loop=0)
解釋下上面的代碼:
初始化一個空列表 frames,以及 0點坐標x和y
用一個運行十次的 for 循環,每次創建一張 400x400 大小的圖片,圖片中紅球的位置不同
更改紅球的坐標,讓紅球沿著對角線往下墜
設置參數 format='GIF',append_images=frames[1:],保存 GIF 圖片
每幀圖片播放100毫秒( duration=100)
GIF圖片一直重復循環( loop=0,如果設置為 1,則循環1次,設置為2則循環2次,以此類推)
最終生成的 GIF 圖大概是下面這樣的:
參考鏈接:https://blog.zhaytam.com/2018/08/21/creating-gifs-using-python-pillow/
題圖:pexels,CC0 授權。
總結
以上是生活随笔為你收集整理的使用pil读取gif图有些位置为黑色_使用 Pillow 快速创建 GIF 动图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安装python的twisted_如何在
- 下一篇: 文本分类数据集_181个NLP教程,48