Auparavant, lors de l'écriture Articles accro à l'animation GIF, [Détails du format GIF](http://www.tohoho-web.com/wwwgif. J'ai trouvé un excellent article appelé htm # ImageBlock). Chaque image du fichier GIF a un délai de 2 octets, qui semble être défini par incréments de 0,01 seconde.
Il est naturel qu'il y ait des données d'image dans le fichier GIF, mais il semble qu'il y ait un bloc de 8 octets appelé ** Extension de contrôle graphique ** devant les données d'image. Graphic Control Extension --Introducteur d'extension (1B) = 0x21 <= marque 1 --Étiquette de contrôle graphique (1B) = 0xf9 <= marque 2 --Block Size (1B) = 0x04 <= marque 3
J'ai vérifié l'animation GIF avec le temps de retard réglé à 1 seconde avec un éditeur binaire.
Il y a un temps de retard 0x6400
suivant correctement les marques 1-30x21f904
.
Comme il est défini en ** 1 seconde **, il est de ** 100 ** lorsqu'il est divisé par ** 0,01 **, donc 100 = 0x0064
, et lorsqu'il est stocké dans Little Dian, il est définitivement 0x6400
.
Vous pouvez modifier la durée d'affichage de chaque image ** en modifiant cette valeur.
ChangeDelay.py
#Ouvrez le fichier GIF en tant que données binaires.
FileName = 'test.gif'
with open(FileName,'rb') as f:
Bin = f.read()
#Recherchez l'extension de contrôle graphique et enregistrez la position et la valeur de retard dans la liste.
GCE = b'\x21\xf9\x04'
DelayList = []
point = 0
while point < len(Bin):
start = Bin.find(GCE,point)
if start<0:break
delay = int.from_bytes(Bin[start+4:start+6],byteorder="little")
DelayList.append([start+4,delay])
point = start+1
#Remplacez le premier par 1 seconde et le second par 5 fois la longueur.
DelayList[0][1]=100
for i in range(1,len(DelayList)//2):
DelayList[-i][1]*=5
#Réécrivez les données binaires.
for point,delay in DelayList:
Bin = Bin[:point] + delay.to_bytes(2,byteorder="little") + Bin[point+2:]
#Enregistrez les données binaires au format GIF.
with open('temp.gif','wb') as f:
f.write(Bin)
Before Les 20 images sont réglées sur 0,05 seconde.
After Le premier a été réglé sur 1 seconde et la seconde moitié a été réécrite 5 fois.
Recommended Posts