我在某些特定路徑上有以下影像:
0.png
1.png
2.png
3.png
4.png
5.png
6.png
7.png
8.png
9.png
10.png
11.png
12.png
13.png
14.png
15.png
16.png
17.png
18.png
19.png
20.png
21.png
22.png
23.png
24.png
25.png
26.png
我想使用以下程式(位于影像所在的同一特定路徑)將這些影像轉換為單個gif
檔案
from PIL import Image
import glob
# Create the frames
frames = []
imgs = glob.glob("*.png")
for i in imgs:
new_frame = Image.open(i)
frames.append(new_frame)
print(i)
# Save into a GIF file that loops forever
frames[0].save('png_to_gif.gif', format='GIF',
append_images=frames[1:],
save_all=True,
duration=160, loop=0)
運行上面的程式后,我得到了這個輸出:
0.png
1.png
10.png
11.png
12.png
13.png
14.png
15.png
16.png
17.png
18.png
19.png
2.png
20.png
21.png
22.png
23.png
24.png
25.png
26.png
3.png
4.png
5.png
6.png
7.png
8.png
9.png
我如何確保程式附加影像的順序與命名它們的順序相同?
uj5u.com熱心網友回復:
計算機不按字母順序排序,而是按字典順序排序。
"10" < "2",導致程式從左到右查看符號(首先將 1 與 2 進行比較,如果相等則停止并大喊 10 更小)。這就是為什么我會那樣跳。
如果每個檔案都具有相同的長度(001.png、002.png 等)會更好。如果您不想這樣做,您可以對它們進行排序,記住長度至關重要(首先檢查長度,然后如果 number1 < number2)
uj5u.com熱心網友回復:
你得到的檔案名似乎是按字典順序排列的,作為字串。這就是為什么以小數字開頭的較長字串排在具有較大數字的較短字串之前的原因。這就像如何ah
排序提前b
按字母順序排列。
您希望字串的數字部分按數字順序排列,因此2
在10
. 為此,您需要應用自己的排序邏輯。
嘗試這樣的事情:
import re # put this at the top of the file
def keyfunc(filename):
prefix, numeral, suffix = re.split(r'(\d )', filename, maxsplit=1)
return parts[0], int(parts[1]), parts[2]
imgs = glob.glob("*.png")
for i in sorted(imgs, key=keyfunc):
...
另一種解決方案可能是將名稱中只有一位數字的檔案重命名為前導零。即,1.png
應成為01.png
等等。這樣,正在應用的排序(通過glob.glob
,或您的檔案系統)將02
正確排序所有內容(因為10
甚至在按字典順序之前正確排序)。
uj5u.com熱心網友回復:
我決定以這種方式修改代碼,它目前似乎有效,如果有一種方法可以創建一個陣列來僅存盤.png
以給定結尾的檔案名,path
歡迎使用:
from PIL import Image
# Create the frames
frames = []
imgs = ["0.png", "1.png", "2.png", "3.png", "4.png", "5.png", "6.png", "7.png", "8.png", "9.png", "10.png", "11.png", "12.png", "13.png", "14.png", "15.png", "16.png", "17.png", "18.png", "19.png", "20.png", "21.png", "22.png", "23.png", "24.png", "25.png", "26.png"]
for i in imgs:
new_frame = Image.open(i)
frames.append(new_frame)
print(i)
# Save into a GIF file that loops forever
frames[0].save('png_to_gif.gif', format='GIF',
append_images=frames[1:],
save_all=True,
duration=180, loop=0)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/402162.html
上一篇:更改后提交表單復選框