2012-04-03 22 views
7

Quiero cambiar el tamaño de la imagen de animación GIF usando Python y PIL o PythonMagick. No puedo encontrar una solución El método PIL y miniatura funciona para jpg y png pero no para gif. ImageMagick tiene el comando mogrify/convert -resize '1280x1024>' pero no puedo encontrar documentación y no sé cómo hacerlo con pythonmagick.Redimensionar la animación GIF, pil/imagemagick, python

¿Alguien sabe la solución?

En el peor de los casos yo uso OS/subproceso y convertir; -S

Gracias.

+1

Te recomiendo que hagas eso mientras tanto - usa subprocesos y convierte. Pythonmagic sufre de esta falta de mantenimiento adecuado, y PIL solo admite la lectura de GIF animados, nada más. Deje la pregunta abierta - tal vez aparezca alguien con un psnipped para hacer el cambio de tamaño con Pythonmagic. – jsbueno

Respuesta

12

Puede usar PIL y images2gif, un módulo basado en PIL corto vinculado a este blog page, y disponible here. El código utilizado para procesar este rose.gif está a continuación. Establecí la propiedad images2gif.readGif 'leer como numpy array' en false para obtener una lista de imágenes PIL para poder usar la función PIL thumbnail.

Orignial: rose Procesado: 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) 

No estoy seguro de cómo preservar la transparencia, mis intentos de hacerlo han fracasado (hasta ahora).

+5

cómo guardar la velocidad de animación? –

+2

De acuerdo con http://www.velocityreviews.com/forums/t354000-pil-and-transparent-gifs.html, debe manejar la transparencia usted mismo, con transparency = im.info ["transparency"]; ...; out.save ("out.gif", transparencia = transparencia) – Collin

3

Algunos persona increíble hizo una versión actualizada de images2gif.py que da cuenta de la transparencia:

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

todavía hay algunos artefactos, pero es mucho mejor que el original!

+3

Falló en el primer intento - la lista de paletas se parece a [Ninguno, Ninguno ... Ninguno] e intenta escribir eso en el nuevo archivo. Tristemente, eso es lo que se espera que suceda cuando una parte del código no viene con pruebas. El original al menos da un mensaje significativo: 'RuntimeError: no se puede obtener la paleta. Tal vez deberías probar imageio en cambio. –