Strona główna Polish Python Coders Group
   Strona główna   Pomoc Zaloguj się Rejestracja  
Witamy, Gość. Zaloguj się lub zarejestruj.
Czy dotarł do Ciebie email aktywacyjny?

Zaloguj się podając nazwę użytkownika, hasło i długość sesji

Aktualności:
Szukaj Szukaj
Strony: [1]   Do dołu
Drukuj
Wątek: Animowane gify, problem kolorami  (Przeczytany 714 razy)
« : 13:43 12/04/12 »
Zdunek Offline
New Python User

Zobacz profil
*

Reputacja: 1
Wiadomości: 15


Witam

Mam problem z gifami. Mam PIL 1.1.7 używam też images2gif.py ale to jest rzecz dodatkowa tak naprawdę.

PIL rozwala wszystkie klatki animowanego gifa poza pierwszą. Przykładowo, oryginalny obrazek:

Oraz po przerobieniu przez skrypt

Testuję i męczę się z tym od kilku dni. Pierwsze co to wziąłem zwykłe seek i pozapisywałem obrazki do plików, pierwszy ok a reszta zaczyna się kaszanić

nie dzieje się tak z wszystkimi plikami, przykładowo ten pozostaje ok
http://s6.ifotos.pl/w/107da4820ae79e1bad3415e5a0215d80.gif

Próbowałem już chyba wszystkich możliwych rzeczy, nie wiem co w tym przypadku począć. Jeśli ktoś ma jakieś pomysły co można z tym zrobić to byłbym bardzo wdzięczny.

Pozdrawiam
Zdunek
Zapisane
« Odpowiedz #1 : 15:03 12/04/12 »
LQC Online
Expert Python User

Zobacz profil
****

Reputacja: 218
Płeć: Mężczyzna
Wiadomości: 979


Nie podałeś skryptu, którym to przetwarzasz. Bez kodu będzie ciężko.

Na pierwszy rzut oka, albo ty albo PIL nie bierze pod uwagę, że klatki są różnicowe, więc każda poza pierwszą zawiera przezroczyste pixele, które są zastępowane jakimś innym kolorem (może np. zmieniłeś paletę?).
Zapisane

Dołącz do projektu Wolnelektury.pl na github (open-source, pro publico bono)
« Odpowiedz #2 : 15:38 12/04/12 »
Zdunek Offline
New Python User

Zobacz profil
*

Reputacja: 1
Wiadomości: 15


Kod
def readGif(filename, asNumpy=True):
""" readGif(filename, asNumpy=True)
 
Read images from an animated GIF file.  Returns a list of numpy
arrays, or, if asNumpy is false, a list if PIL images.
 
"
""
 
# Check PIL
if PIL is None:
raise RuntimeError("Need PIL to read animated gif files.")
 
# Check Numpy
if np is None:
raise RuntimeError("Need Numpy to read animated gif files.")
 
# Check whether it exists
if not os.path.isfile(filename):
raise IOError('File not found: '+str(filename))
 
# Load file using PIL
pilIm = PIL.Image.open(filename)
pilIm
 
# Read all images inside
images = []
try:
while True:
# Get image as numpy array
tmp = pilIm.convert() # Make without palette
a = np.asarray(tmp)
if len(a.shape)==0:
raise MemoryError("Too little memory to convert PIL image to array")
# Store, and next
images.append(a)
pilIm.seek(pilIm.tell()+1)
except EOFError:
pass
 
# Convert to normal PIL images if needed
if not asNumpy:
images2 = images
images = []
for im in images2:
images.append( PIL.Image.fromarray(im) )
 
# Done
return images
 

No ale leciałem też po samych seed i je zapisywałem czyli powiedzmy
im = Image.open('obrazek.gif')
frame = im.seed(0)
frame.save('obr1.gif')
frame im.seed(1)
frame.save('obr2.gif')
frame im.seed(2)
frame.save('obr3.gif')

pierwszy obrazek jest ok, reszta się krzaczy, nie wiem czy to jest wina zapisu i specyficzności danego pliku gif, czy jest coś z PIL nie tak, no ale chodzi o to żeby to zniwelować
Zapisane
« Odpowiedz #3 : 09:00 15/06/12 »
mercury330 Offline
New Python User

Zobacz profil
*

Reputacja: 0
Wiadomości: 6


Cześć
Jeśli jeszcze nie rozwiązałeś problemu to moje propozycja jest taka.
Swego czasu też miałem bardzo dużo problemów z gifami. Prawda też jest taka (moim zdaniem), że jest bardzo dużo programów pomocnych przy obróbce gifów, ale tylko nieliczne są OK.

GIFY operują na otwartej palecie kolorów - 256 kolorów. Można wyznaczyć, który kolor ma być przeźroczysty - o ile jet to potrzebne. Na moje, to co pokazujesz w gifie to jest problem z obsługą palety kolorów.
W gifie palety mogą być statyczne lub dynamiczne. To znaczy jedna paleta kolorów jest przypisana do wszystkich klatek (wtedy trzeba zremapować wszystkie klatki do tej jednej palety), lub też każda klatka ma swoją indywidualną paletę.

... i faktycznie, jak ktoś tam wyżej pisze, że pewnie masz zdefiniowany jakiś kolor jako przeźroczysty i "przebija" przez niego inny kolor - pewnie kolor zdefiniowany jako tło.

Pozdrawiam
Zapisane
Strony: [1]   Do góry
Drukuj
Skocz do:  

© 2007 - 2013 Polish Python Coders Group
Powered by SMF 1.1.18 | SMF © 2006-2009, Simple Machines | Theme by PixelSlot