100 lines
2.2 KiB
Bash
Executable File
100 lines
2.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
|
|
|
|
# Folder with full-size wallpapers
|
|
WALLPAPER_DIR=$("$SCRIPT_DIR/../../scripts/wallpaper_dir.sh")
|
|
|
|
echo "$WALLPAPER_DIR"
|
|
|
|
# Folder to store thumbnails
|
|
THUMB_DIR="$HOME/.cache/wallpaper-thumbs"
|
|
echo "$THUMB_DIR"
|
|
|
|
if [ ! -d $THUMB_DIR ]; then
|
|
mkdir -p $THUMB_DIR;
|
|
fi
|
|
|
|
shopt -s nullglob
|
|
files=( "$THUMB_DIR"/*.jpg "$THUMB_DIR"/*.jpeg "$THUMB_DIR"/*.png )
|
|
# printf ' %s\n' "${files[@]}"
|
|
# Make sure the thumb directory exists
|
|
mkdir -p "$THUMB_DIR"
|
|
|
|
# Max width/height of the thumbnails
|
|
MAX_DIM=300
|
|
|
|
num=0
|
|
|
|
remove_from_array() {
|
|
local -n arr=$1
|
|
local elem=$2
|
|
local result=()
|
|
|
|
# echo "=== Removing element: '$elem' ==="
|
|
# echo "Original array has ${#arr[@]} elements"
|
|
|
|
for item in "${arr[@]}"; do
|
|
if [[ "$item" != "$elem" ]]; then
|
|
result+=( "$item" )
|
|
# echo "Keeping: '$item'"
|
|
# else
|
|
# echo "Removing: '$item'"
|
|
fi
|
|
done
|
|
|
|
arr=( "${result[@]}" )
|
|
# echo "New array has ${#arr[@]} elements"
|
|
# echo "-----------------------------------"
|
|
}
|
|
|
|
# Process each image
|
|
for img in "$WALLPAPER_DIR"/*.{jpg,jpeg,png}; do
|
|
# Skip if no files match
|
|
[ -e "$img" ] || continue
|
|
|
|
# Get just the filename
|
|
fname=$(basename "$img")
|
|
name="${fname%.*}"
|
|
ext="${fname##*.}"
|
|
|
|
# no magick file:
|
|
temp_image_name="$THUMB_DIR/${name}_tmp.${ext}"
|
|
|
|
# Output path
|
|
thumb="$THUMB_DIR/$fname"
|
|
|
|
|
|
# If thumbnail already exists and is newer than the original, skip
|
|
if [ -f "$thumb" ] && [ "$thumb" -nt "$img" ]; then
|
|
remove_from_array files "$thumb"
|
|
continue
|
|
fi
|
|
|
|
((num++))
|
|
|
|
# Generate thumbnail using ImageMagick
|
|
if [ -x "/usr/bin/magick" ]; then
|
|
magick "$img" -resize "${MAX_DIM}x${MAX_DIM}" "$thumb"
|
|
if [ -f "$temp_image_name" ]; then
|
|
rm "$temp_image_name"
|
|
fi
|
|
else
|
|
if [ -f "$temp_image_name" ] && [ "$temp_image_name" -nt "$img" ]; then
|
|
continue
|
|
fi
|
|
cp $img $temp_image_name
|
|
fi
|
|
remove_from_array files "$thumb"
|
|
done
|
|
|
|
# echo ""
|
|
|
|
# printf ' %s\n' "${files[@]}"
|
|
|
|
for img in $files; do
|
|
# echo "$img"
|
|
rm $img
|
|
done
|
|
|
|
echo "$num Thumbnails generated in $THUMB_DIR" |