IMAGENES Y SONIDOS CON PILL Y PYGAME

El dia de hoy veremos como cargar imagenes de distintos formatos en nuestra ventana de Tkinter asi como reproducir sonidos de forma facil usando la libreria Pygame.

Libreria PIL:

Primeramente veremos como cargar imagenes de distinto formato en ventanas Tkinter, para ello es necesario usar la libreria PIL la cual se descarga en versiones de Python 2.7.x Tecleando en la linea de comandos PIP install Pillow y en Python 3.x PIP install PIL.

Esta libreria basicamente nos permite procesar y modificar imagenes de una forma basica y sencilla, principalmente permite el redimensionado y algunas propiedades de color.

from PIL import Image, ImageTk
import Tkinter as tk


ventana=tk.Tk()
ventana.geometry("500x500")

imagen=Image.open("meduermo.gif")
imagen.thumbnail((100, 100), Image.ANTIALIAS)
tkimage=ImageTk.PhotoImage(imagen)


tk.Label(ventana,image=tkimage).pack()
ventana.mainloop()

Como podemos ver en nuestro codigo, importamos 2 modulos para el manejo de imagenes provenientes de la libreria PIL, hablamos de Image y ImageTk. Describamos un poco de como las utilizamos en nuestro caso.

imagen=Image.open("meduermo.gif")
imagen.thumbnail((100, 100), Image.ANTIALIAS)
tkimage=ImageTk.PhotoImage(imagen)


La primer linea obtenemos una imagen utilizando el comando Image.open() y la guardamos para su posterior manipulacion en el objeto imagen.
Con la propiedad thumbnail (miniatura) creamos una miniatura de la imagen con 100 de alto por 100 de ancho y una propiedad antialiazado.
Posteriormente creamos con el comando ImageTk.PhotoImage(imagen) una miniatura compatible con el formato de los widgets de Tkinter y lo guardamos en el objeto tkimage.

Lo siguiente es utilizar este ultimo objeto como cualquier otro para desplegar imagenes, en este caso nos da un resultado como el siguiente.



Aqui esta otro ejemplo, solo que utilizando imagenes al azar en formatos .png:

from Tkinter import *
from PIL import Image,ImageTk
import os
import random
import sys

carpeta=os.path.dirname(__file__)
print carpeta
fotos=carpeta+"/Imagenes/"
print fotos

arreglo=[1,2,3,4,5,6,7,8]
eleccion_aleatoria=str(arreglo.index(random.choice(arreglo))+1)

figura=fotos+eleccion_aleatoria+".png"
print figura
root = Tk()
root.geometry("500x500")

imagen=Image.open(figura)
imagen.thumbnail((500, 500), Image.ANTIALIAS)
img=ImageTk.PhotoImage(imagen)
label=Label(root,image=img).pack()

root.mainloop()

Salida:


Libreria Pygame:

La libreria pygame es mayormente usada para la produccion de videojuegos, modelado de figuras en 2D o 3D y muchas otras cosas mas, por ahora solo usaremos uno de sus modulos, el cual es el modulo Mixer para la reproducción de sonido, hablare en terminos generales asi que si te interesa saber mucho mas de esta libreria te dejo el link de la documentación: https://www.pygame.org/docs/

En fin para Reproducir sonido es necesario 3 instrucciones basicas:

import pygame

pygame.init()
pygame.mixer.music.load("Nombre de la cancion.extension")
pygame.mixer.music.play()

La primer linea despues de la importación siempre debe ir declarada para que el modulo pygame funcione, es basicamente la llave de arranque si es que hacemos una analogia a los autos.
La segunda linea sirve para seleccionar un sonido de nuestro ordenador, puede ser el nombre del sonido o la ruta del mismo dentro de nuestro disco duro, incluyendo su extensión.
Pygame soporta formatos mp3, ogg y wav, almenos esos han sido los que yo he utilizado hasta la fecha y funcionan perfectamente, comentame si intentaste en otro formato y funciono.
Y por ultimo la instruccion para reproducir el sonido: pygame.mixer.music.play()
Ahora al igual que la instruccion play() tambien existe stop() para finalizar abrubtamente la reproducción de sonido.

Para hacer una demostración usaremos un programa basico, dejare el link para descargar los archivos, este mostrara 3 botones en pantalla, al clickear sobre uno de ellos debera reproducir el sonido correspondiente.

from tkinter import *
import pygame
from PIL import ImageTk,Image

def get_image(nombre,x,y):
    Imagen = Image.open(nombre)
    Imagen.thumbnail((x, y), Image.ANTIALIAS)
    return ImageTk.PhotoImage(Imagen)

def play(nombre):
    pygame.mixer.music.load(nombre)
    pygame.mixer.music.play()

pygame.init()
root=Tk()
root.geometry("600x600")


IOveja=get_image("Oveja.jpg",100,100)
boton1=Button(root,image=IOveja,command=lambda : play("Oveja.mp3")).pack()

ISiren=get_image("siren.jpg",100,100)
boton2=Button(root,image=ISiren,command=lambda : play("Siren.mp3")).pack()

IAplauso=get_image("Aplauso.png",100,100)
boton3=Button(root,image=IAplauso,command=lambda :play("Aplauso.mp3")).pack()


root.mainloop()

Salida:


Link de archivos: click aqui

Comentarios