Szukam jakiejś metody, aby uzyskać liczbę klatek gif. patrzę na google, stackoverflow i wszelkie inne strony i znajduję tylko śmieci !! Ktoś wie, jak to zrobić? Potrzebuję tylko prostej liczby ramek GIF.Python, jak mogę uzyskać ramki GIF
Odpowiedz
Którą metodę używasz do ładowania/manipulowania ramką? Czy korzystasz z PIL? Jeśli nie, sugeruję sprawdzenie: Python Imaging Library, a konkretnie the PIL gif page.
Teraz, zakładając, że używasz PIL do czytania w gifie, łatwo jest określić, na którą ramkę patrzysz. poszukaj przejdzie do konkretnej ramki i powiedz zwróci ramkę, którą przeglądasz.
import Image
im = Image.open("animation.gif")
# To iterate through the entire gif
try:
while 1:
im.seek(im.tell()+1)
# do something to im
except EOFError:
pass # end of sequence
W przeciwnym razie, uważam, że można tylko znaleźć liczbę ramek w gif szukając aż wyjątek (EOFError) jest podniesiona.
Wystarczy przeanalizować plik, gify są dość proste:
class GIFError(Exception): pass
def get_gif_num_frames(filename):
frames = 0
with open(filename, 'rb') as f:
if f.read(6) not in ('GIF87a', 'GIF89a'):
raise GIFError('not a valid GIF file')
f.seek(4, 1)
def skip_color_table(flags):
if flags & 0x80: f.seek(3 << ((flags & 7) + 1), 1)
flags = ord(f.read(1))
f.seek(2, 1)
skip_color_table(flags)
while True:
block = f.read(1)
if block == ';': break
if block == '!': f.seek(1, 1)
elif block == ',':
frames += 1
f.seek(8, 1)
skip_color_table(ord(f.read(1)))
f.seek(1, 1)
else: raise GIFError('unknown block type')
while True:
l = ord(f.read(1))
if not l: break
f.seek(l, 1)
return frames
Zakładam, że to wymaga PIL, próbowałem użyć tego na 44 pliku 'gif' pliku, a on zwrócił 0 na mnie ... (policzyłem klatki używając podglądu, ale potrzebuję jakiegoś kodu, aby uzyskać info na ponad 2500 zdjęć) ... – Zizouz212
@ Zizouz212: To działało dla mnie z plikiem testowym 'small_globe.gif', którego użyłem w [moja odpowiedź] (http://stackoverflow.com/a/28549748/355230) do innego Twoje pytanie. Załaduj gdzieś plik obrazu gif o 44 klatce (jak w jednym z twoich pytań), a następnie daj mi znać, abym mógł go pobrać i sprawdzić, czy mogę ustalić przyczynę problemu. – martineau
- 1. imagemagick konwertuj pojedyncze opóźnienie ramki w gif
- 2. Jak mogę uzyskać liczbę klatek na sekundę z pliku GIF?
- 3. Jak wyodrębnić ramek z pliku GIF zachowaniu wymiarów ramki
- 4. Jak mogę wygenerować obrazy GIF w .NET?
- 5. Edytowanie GIF w języku C#
- 6. Jak podzielić .gif w ramkach?
- 7. Jak uzyskać położenie ramki UIView po transformacji?
- 8. Jak przyciąć animowany gif za pomocą ImageMagick?
- 9. Python: Konwertowanie ramek GIF na PNG
- 10. Wyodrębnij ramki wideo w języku Python
- 11. Jak mogę sprawdzić szybkość ramki mojej aplikacji?
- 12. Jak mogę skompresować rozmiar obrazów GIF za pomocą ImageMagick?
- 13. Jak wyodrębnić ramki z TGifImage w bitmapy?
- 14. Jak uzyskać tekst wyjątku Python
- 15. python: zmiana indeks wiersza ramki danych pandy
- 16. Animacja GIF w Gnuplot
- 17. Pasek przewijania Python Tkinter do ramki
- 18. Dodaj obraz jako ramkę do gif
- 19. Jak mogę podzielić pojedyncze wartości ramki danych według średnich miesięcznych?
- 20. Jak mogę uzyskać argparse w Pythonie 2.6?
- 21. python. uzyskać rozmiar obiektu
- 22. Dlaczego nie mogę zmienić ramki mojego UILabel?
- 23. Jak uzyskać URL z ramki iframe za pomocą PHP
- 24. Pandon Pythas: Jak uzyskać nazwy wierszy z indeksu ramki danych?
- 25. Jak uzyskać maksymalny rozmiar ramki każdej funkcji skompilowanej przez gcc?
- 26. Jak mogę uzyskać godziny z datetime Pythona?
- 27. Jak mogę uzyskać podgrupy meczu w Scali?
- 28. Gdzie mogę znaleźć wiele „na poczekaniu” przędzenia cog gif
- 29. Jak wyświetlić gif w UIImageView w Swift?
- 30. jak zmienić rozmiar obrazu gif w android
musiałem zmienić „Importuj obraz” do „z PIL import obrazu”, aby to działało (zgaduję Mam najnowszą wersję Pillow zainstalowany) – sellibitze