Ejercicio en Python: creando iconos con PIL

Autor: | Última modificación: 4 de noviembre de 2022 | Tiempo de Lectura: 4 minutos
Temas en este post:

Hace pocas semanas, estuvimos viendo el modo de crear un archivo ejecutable, a partir de un «.py» usando la librería «pyinstaller». En dicho proceso hablábamos de la posibilidad de personificar el icono de nuestro futuro «.exe» accediendo a algunas de las páginas creadas para tal fin, o bien a través de la librería y estuvimos creando iconos con PIL.

Pues bien, en esta ocasión, vamos a hacerlo contigo. Vamos a crear un sencillo programa que nos permita, crear un archivo de imagen, en un icono para nuestro programa (archivo «.ico»), ejercicio el cual nos servirá para poner en práctica algunos conocimientos que hemos adquirido recientemente.

Empezamos: creando iconos con PIL

Como es habitual, empezaremos importando las librerías y recursos necesarios para que nuestro programa pueda funcionar. De los cuales solo «PIL» tendremos que instalarla (si no lo hemos hecho ya) en nuestro dispositivo (usando el comando «pip»):

creando iconos con "PIL"

Como se ve, hemos importado el módulo «Image» de la librería «PIL». Lo mismo hemos hecho con «os» (que usaremos para establecer la ruta al directorio en el que queremos que se ejecute nuestro programa) y «subprocess».

Puesto que nuestro programa va a crear el archivo «.ico» a partir de un archivo de imagen que tengamos previamente almacenada en alguna carpeta de nuestro sistema. Lo primero que tendremos que indicarle a nuestro programa, es el directorio en el que se encuentra el archivo de imagen a partir del cual, vamos a crear nuestro icono (que será también donde se ubicará el nuevo archivo generado).
Para ello, crearemos una variable («nueva_ruta»), a través de la cual, indicaremos la ruta a dicho directorio. No obstante, puesto que cabe la posibilidad de que se cometa algún error a la hora de introducir tal información (un string inadecuado o una ruta no existente), para evitar que el programa falle en tales casos, indicaremos que muestre el mensaje «RUTA NO VALIDA» y dado que hemos incluido este bloque en un «while», el programa nos volverá a pedirnos la ruta al directorio.

Ejercicio en Python: creando iconos con PIL 1

Por otro lado, si la información introducida, se corresponde con un directorio existente («if os.path.isdir (nueva_ruta):») el programa cambiará el directorio en el que se ejecuta con el método «.chdir()» que será aquel indicado con el input para «nueva_ruta» («os.chdir(nueva_ruta)»). A su vez, puesto que este bloque se esta ejecutando en bucle («while True:») usaremos (en este último caso) «break» para finalizarlo.

Ejercicio en Python: creando iconos con PIL 2

Una vez que nuestro programa tenga la información relativa al directorio en el que se va a ejecutar, pasará a pedirnos que introduzcamos el nombre del archivo de imagen que queremos convertir al formato «.ico», dicho input se almacenará en una variable de nombre «im»:

Ejercicio en Python: creando iconos con PIL 3

Una vez que indiquemos el nombre del archivo a usar, nuestro programa pasará a comprobar si dicho archivo se encuentra dentro del directorio actual («if im in os.listdir():»). De ser así, se creará una variable («name») en la que se almacenará el nombre del archivo sin la extensión («name=diiv[0]» donde «diiv» es la variable que contiene la lista con el nombre y la extensión del archivo original, usando el punto «.» como separador). Por otra parte, en el caso que no exista ningún archivo en el directorio, con el nombre especificado, mostraremos el mensaje «No se encontró el archivo, im» (lo que haremos con un «else»).

Ejercicio en Python: creando iconos con PIL 4

Como se ve en la imagen superior, obtenido el nombre del archivo sin la extensión, usaremos una sentencia «try:» para que nuestro programa «intente», en primer lugar, abrir el archivo indicado en la variable «im» usando el método «Image.open()» («imagen=Image.open(im)») y en segundo lugar, guardar el archivo como un archivo «.ico». Para lo que usaremos el método «.save()» al que le pasaremos como argumento el nombre del archivo original (sin la extensión) mas la nueva extensión «.ico» («imagen.save(name+».ico»)) tras lo cual, el programa mostrará en pantalla el mensaje «ARCHIVO ‘.ICO’ CREADO CON EXITO». Por su parte esta doble operación no pudiera llevarse a cabo (ya sea porque no se puede abrir el archivo indicado, ya sea porque no es apto para convertirse en «.ico») se ejecutará lo previsto en la excepción («except:»), mostrándose el mensaje «No se pudo completar la operación».

Ejercicio en Python: creando iconos con PIL 5Ejercicio en Python: creando iconos con PIL 6

Finalmente, una vez creado el archivo «.ico», nuestro programa nos preguntará si queremos continuar con su ejecución del mismo (para acotar las posibles respuestas del usuario, con «n» para no y «s» para afirmar, emplearemos la función «ns» definida previamente) dicha respuesta del usuario se almacenará en una nueva variable «conti». De modo que si la respuesta es «n» finalizará la ejecución del programa, y si es «s», simplemente continuará la ejecución del bucle, tras la limpieza de la consola con «subprocess» en el caso de windows (para linux usaríamos «os.system(«clear»)») en el que se encuentra incluida la operación de conversión:

Ejercicio en Python: creando iconos con PIL 7Ejercicio en Python: creando iconos con PIL 8

Se puede ver el código completo de este programa en el siguiente enlace a github. Y bueno, así es como estamos creando iconos con PIL. ¿Conocías cómo?

Antonio Alfonso MartínezProgramador y desarrollador autodidacta. Semanalmente publica en el blog El programador Chapuzas (wordpress) y también colaboro en las páginas “Código Comentado” y “Algoritmos MathPy” de Facebook.

Si quieres formar parte de la comunidad KeepCoding, compartiendo información relevante sobre desarrollo Web, Mobile, Big Data o Blockchain puedes escribirnos a [email protected] .

[email protected]

¿Trabajo? Aprende a programar y consíguelo.

¡No te pierdas la próxima edición del Aprende a Programar desde Cero Full Stack Jr. Bootcamp!

 

Prepárate en 4 meses, aprende las últimas tecnologías y consigue trabajo desde ya. 

 

Solo en España hay más de 120.400 puestos tech sin cubrir, y con un sueldo 11.000€ por encima de la media nacional. ¡Es tu momento!

 

🗓️ Próxima edición: 13 de febrero

 

Reserva tu plaza descubre las becas disponibles.