feat(wallpapers): automate element spectrum download and panorama generation
Add script for downloading and processing element emission spectra from Wikimedia Commons. - Read element definitions from get_images.txt - Retrieve original spectrum images from Wikimedia Commons - Download element spectrum PNG files automatically - Generate standardized filenames using atomic metadata - Resize images to 3840px width - Crop images to 3840x540 panorama format - Export processed files to wallpaper collection directory - Report missing spectrum images - Automate creation of element-themed desktop wallpapers
This commit is contained in:
1 parent
16c69ac7df
commit
fbcbf008ea
3 files changed
+102
-16
No files matched your search
+102
@@ -0,0 +1,102 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# Script Name: get_element_spectra.sh
|
||||||
|
#
|
||||||
|
# Description:
|
||||||
|
# Downloads visible-light emission spectrum images for chemical elements
|
||||||
|
# from Wikimedia Commons and converts them into panorama wallpapers.
|
||||||
|
#
|
||||||
|
# For each entry in get_images.txt, the script:
|
||||||
|
# 1. Reads element information from the input file.
|
||||||
|
# 2. Builds a standardized output filename.
|
||||||
|
# 3. Locates the corresponding spectrum image on Wikimedia Commons.
|
||||||
|
# 4. Downloads the original PNG file.
|
||||||
|
# 5. Renames the image using element metadata.
|
||||||
|
# 6. Resizes the image to 3840 pixels wide.
|
||||||
|
# 7. Crops the image to 3840x540 pixels.
|
||||||
|
# 8. Moves the finished panorama wallpaper to the destination folder.
|
||||||
|
#
|
||||||
|
# Input Format (get_images.txt):
|
||||||
|
# element_name atomic_number symbol
|
||||||
|
#
|
||||||
|
# Example:
|
||||||
|
# hydrogen 001 H
|
||||||
|
# helium 002 He
|
||||||
|
# lithium 003 Li
|
||||||
|
#
|
||||||
|
# Output Example:
|
||||||
|
# Elements_Panorama_001_H_Hydrogen.png
|
||||||
|
#
|
||||||
|
# Requirements:
|
||||||
|
# - Bash
|
||||||
|
# - wget
|
||||||
|
# - ImageMagick (convert)
|
||||||
|
# - Internet connection
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
# chmod +x get_element_spectra.sh
|
||||||
|
# ./get_element_spectra.sh
|
||||||
|
#
|
||||||
|
# Notes:
|
||||||
|
# - The script expects get_images.txt in the current directory.
|
||||||
|
# - Images are downloaded from Wikimedia Commons.
|
||||||
|
# - Missing images are reported and skipped.
|
||||||
|
#
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
while IFS= read -r line; do
|
||||||
|
|
||||||
|
# Build output filename:
|
||||||
|
# <atomic_number>_<symbol>_<Element>.png
|
||||||
|
element_name="$(
|
||||||
|
printf "%s_%s_%s%s\n" \
|
||||||
|
"$(echo "$line" | cut -f2 -d' ')" \
|
||||||
|
"$(echo "$line" | cut -f3 -d' ')" \
|
||||||
|
"$(echo "$line" | cut -f1 -d' ' | head -c 1 | tr 'a-z' 'A-Z')" \
|
||||||
|
"$(echo "$line" | cut -f1 -d' ' | tail -c +2)"
|
||||||
|
)"
|
||||||
|
|
||||||
|
# Build capitalized element name used by Wikimedia
|
||||||
|
element="$(
|
||||||
|
printf "%s%s\n" \
|
||||||
|
"$(echo "$line" | cut -f1 -d' ' | head -c 1 | tr 'a-z' 'A-Z')" \
|
||||||
|
"$(echo "$line" | cut -f1 -d' ' | tail -c +2)"
|
||||||
|
)"
|
||||||
|
|
||||||
|
# Retrieve original image URL from Wikimedia Commons
|
||||||
|
LINK="$(
|
||||||
|
wget -qO- "https://commons.wikimedia.org/wiki/File:${element}_spectrum_visible.png" \
|
||||||
|
| grep "Original file" \
|
||||||
|
| grep -o 'href="[^"]*' \
|
||||||
|
| tail -c +7
|
||||||
|
)"
|
||||||
|
|
||||||
|
if [ -z "$LINK" ]; then
|
||||||
|
echo "No spectrum image found for ${element}"
|
||||||
|
continue
|
||||||
|
else
|
||||||
|
echo "Downloading ${element}: ${LINK}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Download original image
|
||||||
|
wget "$LINK"
|
||||||
|
|
||||||
|
# Rename downloaded image
|
||||||
|
mv "${element}_spectrum_visible.png" "${element_name}.png"
|
||||||
|
|
||||||
|
# Resize image to 3840 pixels wide
|
||||||
|
convert "${element_name}.png" \
|
||||||
|
-resize 3840x \
|
||||||
|
"${element_name}.png"
|
||||||
|
|
||||||
|
# Crop to panorama format
|
||||||
|
convert "${element_name}.png" \
|
||||||
|
-crop 3840x540+0+0 \
|
||||||
|
"${element_name}.png"
|
||||||
|
|
||||||
|
# Move final image to wallpaper directory
|
||||||
|
mv "${element_name}.png" \
|
||||||
|
"/home/lucas/Documents/Dokumente/Zeug/Wallpaper/Desktop1920x1080/Elements/Elements_Panorama_${element_name}.png"
|
||||||
|
|
||||||
|
done < "get_images.txt"
|
||||||
File renamed without changes.
@@ -1,16 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
while IFS= read -r line; do
|
|
||||||
element_name="$(printf "%s_%s_%s%s\n" "$(echo $line | cut -f2 -d' ')" "$(echo $line | cut -f3 -d' ')" "$(echo $line | cut -f1 -d' ' | head -c 1 | tr 'a-z' 'A-Z')" "$(echo $line | cut -f1 -d' ' | tail -c +2)")"
|
|
||||||
element="$(printf "%s%s\n" "$(echo $line | cut -f1 -d' ' | head -c 1 | tr 'a-z' 'A-Z')" "$(echo $line | cut -f1 -d' ' | tail -c +2)")"
|
|
||||||
LINK="$(wget -qO- https://commons.wikimedia.org/wiki/File:${element}_spectrum_visible.png | grep "Original file" | grep -o 'href="[^"]*' | tail -c +7)"
|
|
||||||
if [ "$LINK" == "" ]; then
|
|
||||||
echo "None for $element"
|
|
||||||
else
|
|
||||||
echo $LINK
|
|
||||||
fi
|
|
||||||
wget $LINK
|
|
||||||
mv ${element}_spectrum_visible.png ${element_name}.png
|
|
||||||
convert ${element_name}.png -resize 3840x ${element_name}.png
|
|
||||||
convert ${element_name}.png -crop 3840x540+0+0 ${element_name}.png
|
|
||||||
mv ${element_name}.png /home/lucas/Documents/Dokumente/Zeug/Wallpaper/Desktop1920x1080/Elements/Elements_Panorama_${element_name}.png
|
|
||||||
done < "get_images.txt"
|
|
||||||
Reference in new issue
Block a user