This commit is contained in:
Ramses Revengeday 2025-03-06 10:34:35 +00:00
parent 19a1d656d8
commit 87806d1cdc

119
cyco.sh Normal file
View file

@ -0,0 +1,119 @@
#!/bin/bash
# ANSI colours
CYAN='\033[0;36m'
DARK_CYAN='\033[1;36m'
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m'
echo -e "${CYAN}
██████ ██ ██ ██████ ██████ ███████ ██ ██
██ ██ ██ ██ ██ ██ ██ ██ ██
██ ████ ██ ██ ██ ███████ ███████
██ ██ ██ ██ ██ ██ ██ ██
██████ ██ ██████ ██████ ██ ███████ ██ ██
${DARK_CYAN}
- CYBER COMPRESSOR -
- // https://git.cyberwa.re/revengeday/cyco // -
${NC}"
# ImageMagick check
if ! command -v mogrify &> /dev/null; then
echo -e "${RED}Oooooooops!${NC}"
echo -e "${RED}ImageMagick not found.${NC}"
echo -e "${YELLOW}Install using Homebrew:${NC}"
echo -e "${YELLOW}1. /bin/bash -c \"\$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)\"${NC}"
echo -e "${YELLOW}2. brew install imagemagick${NC}"
exit 1
fi
USE_CLI=false
CHOICE=""
FOLDER=""
FILE=""
QUALITY=""
# Argument Parsing
while [[ "$#" -gt 0 ]]; do
case $1 in
--cli) USE_CLI=true ;;
--f) CHOICE="f"; FOLDER="$2"; shift ;;
--i) CHOICE="i"; FILE="$2"; shift ;;
--quality) QUALITY="$2"; shift ;;
*) echo -e "${RED}Unknown parameter passed: $1${NC}"; exit 1 ;;
esac
shift
done
# If not in CLI mode, prompt for input
if [[ "$USE_CLI" == false ]]; then
echo -e "${YELLOW}Would you like to compress a folder or a single image? (f/i)${NC}"
read -p "Enter 'f' for folder or 'i' for image: " CHOICE
fi
# Handle folder or file selection
if [[ "$CHOICE" == "f" ]]; then
if [[ -z "$FOLDER" ]]; then
if [[ "$USE_CLI" == true ]]; then
read -p "Enter the path to the folder: " FOLDER
else
echo -e "${YELLOW}Select a folder with images to compress.${NC}"
FOLDER=$(osascript -e 'tell application "Finder" to POSIX path of (choose folder)')
fi
fi
if [[ -z "$FOLDER" ]]; then
echo -e "${RED}No folder selected.${NC}"
exit 1
fi
shopt -s nullglob
FILES=("$FOLDER"/*.{jpg,jpeg,png,JPG,JPEG,PNG})
shopt -u nullglob
if [ ${#FILES[@]} -eq 0 ]; then
echo -e "${YELLOW}Yikes, no images found in the folder.${NC}"
exit 0
fi
elif [[ "$CHOICE" == "i" ]]; then
if [[ -z "$FILE" ]]; then
if [[ "$USE_CLI" == true ]]; then
read -p "Enter the path to the image: " FILE
else
echo -e "${YELLOW}Select an image to compress.${NC}"
FILE=$(osascript -e 'tell application "Finder" to POSIX path of (choose file)')
fi
fi
if [[ -z "$FILE" ]]; then
echo -e "${RED}No image selected.${NC}"
exit 1
fi
FILES=("$FILE")
else
echo -e "${RED}Invalid choice. Please enter 'f' or 'i'.${NC}"
exit 1
fi
# Quality input
if [[ -z "$QUALITY" ]]; then
read -p "Enter quality (1-100): " QUALITY
fi
if ! [[ "$QUALITY" =~ ^[1-9][0-9]?$|^100$ ]]; then
echo -e "${RED}Invalid quality. Enter a number 1-100.${NC}"
exit 1
fi
# Compression
for file in "${FILES[@]}"; do
echo -e "${YELLOW}Compressing $file with quality $QUALITY...${NC}"
mogrify -quality "$QUALITY" "$file" && \
echo -e "${GREEN}Compressed: $file${NC}" || \
echo -e "${RED}Failed: $file${NC}"
done
echo -e "${GREEN}Compression done.${NC}"