From 87806d1cdc4a707cbc4aa33877a479788d02563d Mon Sep 17 00:00:00 2001 From: revengeday <revengeday@noreply.git.cyberwa.re> Date: Thu, 6 Mar 2025 10:34:35 +0000 Subject: [PATCH] Preem --- cyco.sh | 119 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 cyco.sh diff --git a/cyco.sh b/cyco.sh new file mode 100644 index 0000000..57d5b4b --- /dev/null +++ b/cyco.sh @@ -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}" \ No newline at end of file