Imagen del día de la nasa como fondo de pantalla [Script]

Imagen del día de la nasa como fondo de pantalla [Script]

Como programador y fanático del universo siempre he tenido la inquietud de visualizar la imagen del día de la nasa como fondo de pantalla, por supuesto esto de forma automática, hace tiempo por fin me di a la tarea de hacerlo por lo que si te interesa te dejo el script en Python.

Siempre me ha fascinado el universo, así como me encanta la programación.

Es por esto que he tenido en mente la idea de hacer algo que se relacione entre ambas materias.

Ya anteriormente he desarrollado una animación de planetas con programación en 3d.


¿Sabías que?

¿Necesitas aprender algo nuevo ? Ve a Udemy, busca el tema del que quieres aprender, selecciona el curso para ti y continua con tu aprendizaje.

Udemy

Pero esta idea del día de hoy es otra de las inquietudes que tenia tiempo atrás.

Hoy veremos como establecer la imagen del día de la nasa como fondo de pantalla mediante un script en Python.

Antes de iniciar debemos de obtener un api key de la nasa.

Lo primero será obtener la ruta de la imagen del día de la nasa o apod.

# Obtener la imagen astronómica del día
apod_url = "https://api.nasa.gov/planetary/apod"
api_key = "[Tu api key]"
today = datetime.date.today().strftime("%Y-%m-%d")
url = f"{apod_url}?api_key={api_key}&date={today}"
response = urllib.request.urlopen(url)
data = response.read()
textdata = json.loads(data)
urlimage = textdata['hdurl']
descimage = textdata['explanation']
response.close()

Después vamos a descargarla directamente.

Como puedes ver se obtienen dos valores, la url de la imagen del día en HD y el texto descriptivo de esa imagen.

# Descargar la imagen
response = urllib.request.urlopen(urlimage)
data = response.read()
response.close()

Para después volver a abrirla para trabajar un poco con ella.

# Abrimos nuevamente la imagen
filename = f"_nasawallpapers/{today}_apod.jpg"
with open(filename, "wb") as f:
    f.write(data)

Ahora vamos a prepararnos para agregar texto a la imagen.

# Preparamos para agregar texto a la imagen
img = Image.open(filename)
I1 = ImageDraw.Draw(img)

Antes de eso vamos a obtener el tamaño de la imagen del dia y de nuestro equipo.

# Obtener la resolución de la pantalla y imagen
screen_width, screen_height = pyautogui.size()
ancho_imagen, alto_imagen = img.size

Establecemos la fuente del texto a utilizar.

# Establecemos la fuente
myFont = ImageFont.truetype('arial.ttf', 14)

Utilizaremos el texto descripción de la imagen del día, solo que como viene muy largo vamos a cortarlo en pedazos para que existan saltos de linea.

lineas = textwrap.wrap(descimage, width=50)
x, y = (ancho_imagen/2)+150, (alto_imagen/2)-150
for linea in lineas:
    # Caja de fondo 
    bbox = I1.textbbox((x,y), linea, font=myFont)
    I1.rectangle(bbox, fill="black")
    # Texto
    I1.text((x, y), linea, font=myFont, fill="white")
    y+= myFont.getbbox(linea)[1] + 12
    
img.save(filename)

También colocamos un fondo negro con las letras blancas para mejor visibilidad y asegurar que sea legible siempre.

Ahora vamos a redimensionar el tamaño de la imagen para que se vea bien en nuestra pantalla.

# Redimensionamos la imagen a tamaño de pantalla
img = Image.open(filename)
if ancho_imagen > screen_width or alto_imagen > screen_height:
    proporcion_ancho = screen_width / ancho_imagen
    proporcion_alto = screen_height / alto_imagen
    proporcion = min(proporcion_ancho, proporcion_alto)
    nuevo_ancho = int(ancho_imagen * proporcion)
    nuevo_alto = int(alto_imagen * proporcion)
    img = img.resize((nuevo_ancho, nuevo_alto), Image.LANCZOS)
    fondo = Image.new("RGB", (screen_width, screen_height))
    x = (screen_width - nuevo_ancho) // 2
    y = (screen_height - nuevo_alto) // 2
    fondo.paste(img, (x, y))
    fondo.save(filename)

Y por último establecemos la imagen generada como imagen de pantalla con el siguiente código.

# Establecer la imagen como fondo de pantalla
SPI_SETDESKWALLPAPER = 20
ctypes.windll.user32.SystemParametersInfoW(SPI_SETDESKWALLPAPER, 0, os.path.abspath(filename) , 0)

Guardamos el script con extensión .py.

Obviamente debemos tener instalado Python así como realizar los import necesarios para este código.

import urllib.request
import os
import ctypes
import datetime
import json
import textwrap
import pyautogui
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont

Ahora solo abrimos una consola y ejecutamos py script.py y listo.

Si queremos poder ver la imagen del día de la nasa automáticamente todos los días entonces haremos lo siguiente:

Vamos a crear en la misma ruta del script un archivo con extensión .cmd y con el código py script.py.

Al ejecutar este archivo se ejecutará el script y se cambiará el fondo de pantalla.

imagen del dia de la nasa como fondo de pantalla - demo

Ahora vamos a crear un acceso directo de este archivo cmd y lo vamos a pegar en la carpeta que se abre al ejecutar «shell:startup«.

Con esto cada que inicie nuestro equipo se ejecutará el script cmd que ejecutará a su vez el script Python.

Cada que iniciemos nuestra computadora podremos admirar de la imagen del día de la nasa con su descripción.

Si esta información sobre un script para establecer la imagen del día de la nasa como fondo de pantalla automáticamente te ha sido de utilidad entonces no olvides compartirla en tus redes sociales favoritas y dejarnos un comentario en la sección de abajo, será un placer poder ayudarte.

¡Hasta luego!

Clic para valorar esta información
[Total: 2 Promedio: 5]