1
1
This commit is contained in:
2026-06-10 11:22:45 +02:00
parent 9f4f89763d
commit 317ea4db41
9 changed files with 178 additions and 18 deletions

BIN
cabin-4.png (Stored with Git LFS)

Binary file not shown.

BIN
car-wreck.png (Stored with Git LFS)

Binary file not shown.

BIN
city-on-water.jpg (Stored with Git LFS)

Binary file not shown.

BIN
clouds.png (Stored with Git LFS)

Binary file not shown.

BIN
clouds.png.webp (Stored with Git LFS) Normal file

Binary file not shown.

56
compare_and_delete_larger.sh Executable file
View File

@@ -0,0 +1,56 @@
#!/bin/bash
# Script to compare .png/.jpg with their .webp versions and delete the larger one
# Usage: ./compare_and_delete_larger.sh [directory]
# Default: current directory
set -euo pipefail
TARGET_DIR="${1:-.}"
echo "Scanning for image files in: $TARGET_DIR"
# Function to process a single image file
process_file() {
local original="$1"
local webp_file="${original}.webp"
# Check if webp version exists
if [[ ! -f "$webp_file" ]]; then
echo "[SKIP] No webp version for: $original"
return 0
fi
# Get file sizes
local original_size
local webp_size
original_size=$(stat -c%s "$original" 2>/dev/null || echo "0")
webp_size=$(stat -c%s "$webp_file" 2>/dev/null || echo "0")
echo "[COMPARE] $original ($(numfmt --to=iec $original_size)) vs $webp_file ($(numfmt --to=iec $webp_size))"
# Compare sizes
if [[ "$original_size" -gt "$webp_size" ]]; then
echo "[DELETE] $original is larger, deleting..."
rm -v "$original"
elif [[ "$original_size" -lt "$webp_size" ]]; then
echo "[DELETE] $webp_file is larger, deleting..."
rm -v "$webp_file"
else
echo "[SKIP] Both files have the same size"
fi
}
# Export the function for use with find -exec
Export_func() {
export -f process_file
}
Export_func
# Find all .png and .jpg files (case insensitive) and process them
find "$TARGET_DIR" -type f \( -iname "*.png" -o -iname "*.jpg" -o -iname "*.jpeg" \) -print0 | while IFS= read -r -d '' file; do
process_file "$file"
done
echo ""
echo "Done!"

119
convert_to_webp.sh Executable file
View File

@@ -0,0 +1,119 @@
#!/bin/bash
# Batch convert all PNG/JPG/JPEG to WebP
# Usage: ./convert_to_webp.sh
# Output: appends .webp to each filename (e.g., "file.png" -> "file.png.webp")
# This avoids filename collisions - you can clean up names later
set -e
echo "=== WebP Batch Conversion ==="
echo "Starting at: $(date)"
echo ""
TOTAL_ORIGINAL=0
TOTAL_WEBP=0
CONVERTED=0
SKIPPED=0
# Function to format bytes
format_bytes() {
local bytes=$1
if (( bytes >= 1073741824 )); then
echo "$(echo "scale=2; $bytes / 1073741824" | bc) GB"
elif (( bytes >= 1048576 )); then
echo "$(echo "scale=2; $bytes / 1048576" | bc) MB"
elif (( bytes >= 1024 )); then
echo "$(echo "scale=2; $bytes / 1024" | bc) KB"
else
echo "$bytes B"
fi
}
echo "Processing PNG files (lossless)..."
for f in *.png; do
[ -f "$f" ] || continue
original_size=$(stat -c%s "$f")
TOTAL_ORIGINAL=$((TOTAL_ORIGINAL + original_size))
output="${f}.webp"
# Skip if already converted
if [ -f "$output" ]; then
echo " SKIP (already exists): $f"
SKIPPED=$((SKIPPED + 1))
continue
fi
echo -n " Converting: $f ... "
cwebp -lossless "$f" -o "$output" > /dev/null 2>&1
if [ -f "$output" ] && [ -s "$output" ]; then
webp_size=$(stat -c%s "$output")
TOTAL_WEBP=$((TOTAL_WEBP + webp_size))
savings=$((original_size - webp_size))
pct=$(echo "scale=1; $savings * 100 / $original_size" | bc)
echo "DONE [$(format_bytes $original_size) -> $(format_bytes $webp_size) | ${pct}% saved]"
CONVERTED=$((CONVERTED + 1))
else
echo "FAILED"
fi
done
echo ""
echo "Processing JPG/JPEG files (quality 100)..."
for f in *.jpg *.jpeg; do
[ -f "$f" ] || continue
original_size=$(stat -c%s "$f")
TOTAL_ORIGINAL=$((TOTAL_ORIGINAL + original_size))
output="${f}.webp"
# Skip if already converted
if [ -f "$output" ]; then
echo " SKIP (already exists): $f"
SKIPPED=$((SKIPPED + 1))
continue
fi
echo -n " Converting: $f ... "
cwebp -q 100 "$f" -o "$output" > /dev/null 2>&1
if [ -f "$output" ] && [ -s "$output" ]; then
webp_size=$(stat -c%s "$output")
TOTAL_WEBP=$((TOTAL_WEBP + webp_size))
savings=$((original_size - webp_size))
pct=$(echo "scale=1; $savings * 100 / $original_size" | bc)
echo "DONE [$(format_bytes $original_size) -> $(format_bytes $webp_size) | ${pct}% saved]"
CONVERTED=$((CONVERTED + 1))
else
echo "FAILED"
fi
done
echo ""
echo "=== Summary ==="
echo "Converted: $CONVERTED files"
echo "Skipped: $SKIPPED files (already exist)"
echo ""
echo "Original total: $(format_bytes $TOTAL_ORIGINAL)"
echo "WebP total: $(format_bytes $TOTAL_WEBP)"
if [ $TOTAL_ORIGINAL -gt 0 ]; then
SAVINGS=$((TOTAL_ORIGINAL - TOTAL_WEBP))
PCT=$(echo "scale=1; $SAVINGS * 100 / $TOTAL_ORIGINAL" | bc)
echo "Space saved: $(format_bytes $SAVINGS) ($PCT%)"
fi
echo ""
echo "Finished at: $(date)"
echo ""
echo "=== Git LFS Note ==="
echo "The .webp files are NOT added to git."
echo "To track them with Git LFS later, run:"
echo " git lfs track '*.webp'"
echo " git add .gitattributes"
echo " git add *.webp"
echo " git commit -m 'Add WebP versions'"

BIN
cool.jpg (Stored with Git LFS)

Binary file not shown.

BIN
corals-fish-underwater.jpg (Stored with Git LFS)

Binary file not shown.