7

Ich möchte die Größe des GIF-Animationsimage mit Python und PIL oder PythonMagick ändern. Ich kann keine Lösung finden. PIL und thumbnail-Methode funktioniert für JPG und Png, aber nicht für GIF. ImageMagick hat den Befehl mogrify/convert -resize '1280x1024>', aber ich kann keine Dokumentation finden und ich weiß nicht, wie ich es mit pythonmagick machen soll.Größe ändern GIF-Animation, pil/imagemagick, python

Wer kennt die Lösung?

Im schlimmsten Fall i os/subprocess verwenden und konvertieren; -S

Dank.

+1

Ich würde empfehlen, dass Sie gerade das in der Zwischenzeit tun - Subprozess verwenden und konvertieren. Pythonmagic leidet an diesem Mangel an korrekter Pflege - und PIL unterstützt nur das Lesen animierter GIFs, sonst nichts. Lass die Frage offen - vielleicht taucht jemand mit einem Psnipped auf, um die Größe mit Pythonmagic zu ändern. – jsbueno

Antwort

12

Sie können PIL und images2gif, ein kurzes Modul auf PIL-Basis, das mit diesem blog page verbunden ist, und here verwenden. Der zur Verarbeitung verwendete Code lautet rose.gif. Ich setze die images2gif.readGif Eigenschaft 'als numpy Array lesen' auf false, um eine Liste von PIL-Bildern zu erhalten, so wie ich die PIL thumbnail Funktion verwenden könnte.

Orignial: rose verarbeitet: small rose

import Image 
import images2gif 

frames = images2gif.readGif("rose.gif",False) 
for frame in frames: 
    frame.thumbnail((100,100), Image.ANTIALIAS) 

images2gif.writeGif('rose99.gif', frames) 

Ich bin nicht sicher, wie die Transparenz zu wahren, meine Versuche, dies zu tun, ist fehlgeschlagen (bisher).

+5

Wie kann man die Animationsgeschwindigkeit speichern? –

+2

Laut http://www.velocityreviews.com/forums/t354000-pil-and-transparent-gifs.html müssen Sie selbst mit Transparenz umgehen, mit transparency = im.info ["transparency"]; ...; out.save ("out.gif", transparency = transparency) – Collin

3

Einige erstaunliche Person machte eine aktualisierte Version von images2gif.py, die für Transparenz-Konten:

https://bitbucket.org/bench/images2gif.py/overview

Es gibt noch einige Artefakte, aber es ist viel besser als das Original!

+3

Beim ersten Versuch fehlgeschlagen - Palettenliste sieht wie [None, None .. None] aus und versucht, das in die neue Datei zu schreiben. Leider wird das erwartet, wenn ein Code nicht mit Tests geliefert wird. Das Original gibt zumindest eine sinnvolle Nachricht: 'RuntimeError: Palette kann nicht abgerufen werden. Vielleicht solltest du stattdessen imageio ausprobieren –