CREANDO EJERCICIOS EN PYTHON

Ejercicio en Python: creando iconos con «PIL»

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 «PIL». Pues bien, en esta ocasión, 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.

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»):

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.

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.

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»:

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»).

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».

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:

Se puede ver el código completo de este programa en el siguiente enlace a github:

 

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 JustCodeIt, compartiendo información relevante sobre desarrollo Web, Mobile, Big Data o Blockchain puedes escribirnos a [email protected] .

Share this:

Leave a comment