lunes, 4 de julio de 2016

Animaciones con Pyapng




El módulo Pyapng es un desarrollo reciente que permite crear animaciones APNG a partir de una secuencia de imágenes.

El formato APNG es una ampliación del formato de imágenes PNG que soporta animaciones. Normalmente, la extensión .png se suele utilizar con los dos tipos de archivos aunque las animaciones tienen reservada la extensión .apng.

Los archivos PNG con respecto a los JPG tienen la ventaja de utilizar un algoritmo de comprensión que consigue reconstruir las imágenes originales sin sufrir perdidas. También, como sucede con los GIFs, soportan transparencias aunque en este caso admiten hasta 256 niveles de opacidad.

Instalación de Pyapng


Para construir animaciones basadas en imágenes .png sólo es necesario instalar el módulo pyapng:

$ pip install apng

Sin embargo, para poder crear animaciones que utilicen imágenes .jpg y de otros formatos instalar además el módulo Pillow.

$ pip install pillow

Si tiene alguna versión de Pillow instalada desde hace tiempo se recomienda su actualización a la versión más reciente:

$ pip install pillow --upgrade


El navegador Internet Firefox reproduce las animaciones APNG sin necesidad de instalar ningún complemento. Para ver las animaciones de los ejemplos se recomienda abrir esta página con Firefox.

Crear una animación APNG


El siguiente ejemplo crea una animación APNG con las imágenes de la lista. Entre una imagen y la siguiente se introduce un retardo de 0,1 segundos (delay=100):




(Para probar ejemplos, descargar imágenes)


from apng import APNG
APNG.from_files(['atleta-01.jpg',
                 'atleta-02.jpg', 
                 'atleta-03.jpg',
                 'atleta-04.jpg',
                 'atleta-05.jpg'], 
                 delay=100).save('animatleta1.png')



Crear una animación APNG con retardos diferentes


A continuación, un ejemplo similar al anterior pero que establece dos retardos distintos. El primero, de 0,2 segundos se utiliza con las cuatro primeras imágenes y el segundo, de 1 segundo, con la última imagen:

t1 = 200
t2 = 1000
atletas = [('atleta-01.jpg', t1),
           ('atleta-02.jpg', t1),
           ('atleta-03.jpg', t1),
           ('atleta-04.jpg', t1),
           ('atleta-05.jpg', t2)]

anima = APNG()
for archivo, delay in atletas:
    anima.append(archivo, delay=delay)
anima.save('animatleta2.png')



Extraer imágenes de un archivo APNG


Por último, un ejemplo para mostrar el modo de extraer y guardar, una a una, la imágenes de una animación APNG:

anim = APNG.open('animatleta1.png')
cont = 1
for png, control in anim.frames:
    png.save('img-{cont}.png'.format(cont=cont))
    cont += 1



Ir al índice del tutorial de Python