First commit
This commit is contained in:
345
convertimage.sh
Executable file
345
convertimage.sh
Executable file
@@ -0,0 +1,345 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
italic="\033[3m"
|
||||
#underline="\033[4m"
|
||||
bgd="\033[1;4;31m"
|
||||
red="\033[1;31m"
|
||||
bold="\033[1m"
|
||||
bold_under="\033[1;4m"
|
||||
reset="\033[0m"
|
||||
|
||||
shopt -s globstar
|
||||
shopt -s nullglob
|
||||
|
||||
|
||||
### Preferences ###
|
||||
|
||||
## Destination folder ##
|
||||
dest_folder=$HOME/Desktop/convertimage
|
||||
|
||||
# Input folder
|
||||
folder=/Users/bruno/Desktop/Photo-du-mois
|
||||
|
||||
## mozjepg ##
|
||||
|
||||
# /opt/homebrew/opt/jpeg-turbo/bin/cjpeg (89872ko) libjpeg-turbo version 2.1.3 (build 20220225)
|
||||
# https://www.libjpeg-turbo.org/ https://github.com/libjpeg-turbo/libjpeg-turbo https://sourceforge.net/projects/libjpeg-turbo/files/2.1.3/
|
||||
|
||||
# mozjpeg => /usr/local/bin/mozcjpeg -> /opt/homebrew/opt/mozjpeg/bin/cjpeg (108608) mozjpeg version 4.0.3 (build 20210225)
|
||||
# https://github.com/mozilla/mozjpeg
|
||||
|
||||
# cjpeg => /opt/homebrew/bin/cjpeg -> ../Cellar/jpeg/9e/bin/cjpeg (72112) jpeg9e
|
||||
# https://www.ijg.org/
|
||||
|
||||
mozjpeg_lossless=false
|
||||
moz_quality=75
|
||||
|
||||
## sips ##
|
||||
|
||||
sips_quality=50
|
||||
|
||||
## webp ##
|
||||
|
||||
webp_lossless=false
|
||||
webp_quality=75
|
||||
|
||||
## avif ##
|
||||
|
||||
avif_lossless=false
|
||||
|
||||
|
||||
#clear
|
||||
|
||||
# Destination folder
|
||||
if [ ! -d "$dest_folder" ]; then
|
||||
echo -e "Creating destination folder..."
|
||||
mkdir "$dest_folder"
|
||||
fi
|
||||
|
||||
# Input folder
|
||||
|
||||
if [[ $folder == "" ]]; then
|
||||
while true
|
||||
do
|
||||
read -e -pr "Images folder: " -i "$HOME" folder
|
||||
|
||||
if [ -d "$folder" ]; then
|
||||
break
|
||||
else
|
||||
echo -e "The folder $folder doesn't exist !"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
: <<'END_COMMENT'
|
||||
END_COMMENT
|
||||
|
||||
# Main Menu
|
||||
|
||||
main() {
|
||||
|
||||
clear
|
||||
|
||||
while :
|
||||
do
|
||||
clear
|
||||
|
||||
echo -e ""
|
||||
echo -e "${bold} 🔈 Convertimage${reset}"
|
||||
echo -e ""
|
||||
echo -e "Source folder: ${bold}$folder${reset}"
|
||||
echo -e "Destination folder: ${bold}$dest_folder${reset}"
|
||||
echo -e ""
|
||||
echo -e "---------------------------------"
|
||||
echo -e " Main Menu "
|
||||
echo -e "---------------------------------"
|
||||
echo -e " 1) ${bgd}A${reset}bout "
|
||||
echo -e " 2) ${bgd}H${reset}elp "
|
||||
|
||||
echo -e " 3) ${bgd}m${reset}ozjpeg "
|
||||
echo -e " 4) a${bgd}v${reset}if "
|
||||
echo -e " 5) ${bgd}w${reset}ebp "
|
||||
echo -e " 6) hei${bgd}c${reset} "
|
||||
|
||||
echo -e " 7) ${bgd}Q${reset}uit "
|
||||
echo -e "================================="
|
||||
echo -e "Enter your menu choice [1-7]: \c "
|
||||
|
||||
read -er main_menu
|
||||
|
||||
|
||||
|
||||
if [[ $main_menu == "1" ]] || [[ $main_menu == "a" ]] || [[ $main_menu == "A" ]]; then
|
||||
about
|
||||
elif [[ $main_menu == "2" ]] || [[ $main_menu == "h" ]] || [[ $main_menu == "H" ]]; then
|
||||
help
|
||||
elif [[ $main_menu == "3" ]] || [[ $main_menu == "m" ]] || [[ $main_menu == "M" ]]; then
|
||||
_mozjpeg
|
||||
elif [[ $main_menu == "4" ]] || [[ $main_menu == "v" ]] || [[ $main_menu == "V" ]]; then
|
||||
_avif
|
||||
elif [[ $main_menu == "5" ]] || [[ $main_menu == "w" ]] || [[ $main_menu == "W" ]]; then
|
||||
_webp
|
||||
elif [[ $main_menu == "6" ]] || [[ $main_menu == "c" ]] || [[ $main_menu == "C" ]]; then
|
||||
_heic
|
||||
elif [[ $main_menu == "7" ]] || [[ $main_menu == "q" ]] || [[ $main_menu == "Q" ]]; then
|
||||
exit 0
|
||||
else
|
||||
echo -e "\n${red}Oops!!! Please Select Correct Choice${reset}";
|
||||
echo -e "Press ${bold}ENTER${reset} To Continue..." ;
|
||||
read -pr ""
|
||||
fi
|
||||
|
||||
done
|
||||
|
||||
}
|
||||
|
||||
about() {
|
||||
|
||||
clear
|
||||
echo ""
|
||||
echo -e "${bold}About convertimage:${reset}"
|
||||
echo ""
|
||||
|
||||
echo ""
|
||||
echo "Convert image file to avif, webp or mozjpeg format."
|
||||
|
||||
echo ""
|
||||
echo "<Press Enter to quit>"
|
||||
read -pr ""
|
||||
}
|
||||
|
||||
help() {
|
||||
clear
|
||||
echo ""
|
||||
echo -e "${bold_under}Help:${reset}"
|
||||
|
||||
echo -e "\n${bold}Main Menu:${reset}"
|
||||
|
||||
echo -e "\n<Press Enter to quit>"
|
||||
read -pr ""
|
||||
}
|
||||
|
||||
|
||||
_mozjpeg() {
|
||||
clear
|
||||
|
||||
if [ "$mozjpeg_lossless" = true ]; then
|
||||
bin=$(command -v jpegtran || command -v mozjpegtran)
|
||||
if [ "$bin" = "" ]; then echo -e "${bold}convertimage${reset} require ${bold}jpegtran${reset} from ${bold}mozjpeg${reset} but it's not installed.\nRun ${italic}(brew install mozjpeg)${reset}\nAborting..." >&2; exit 1; fi;
|
||||
|
||||
echo -e "\n${bold}jpegtran converter${reset}\n"
|
||||
|
||||
for FILE in "${folder}"/**/*.{jpg,jpeg}
|
||||
do
|
||||
filename=$(basename "$FILE")
|
||||
#extension=${filename##*.}
|
||||
filename=${filename%.*}
|
||||
|
||||
echo -e "${italic}Convert $FILE${reset}🗑"
|
||||
|
||||
mozjpegtran -outfile "$dest_folder/$filename.jpg" "$FILE"
|
||||
done
|
||||
|
||||
else
|
||||
bin=$(command -v cjpeg || command -v mozcjpeg)
|
||||
if [ "$bin" = "" ]; then echo -e "${bold}convertimage${reset} require ${bold}cjpeg${reset} from ${bold}mozjpeg${reset} but it's not installed.\nRun ${italic}(brew install mozjpeg)${reset}\nAborting..." >&2; exit 1; fi;
|
||||
|
||||
echo -e "\n${bold}cjpeg converter${reset}\n"
|
||||
|
||||
for FILE in "${folder}"/**/*.{jpg,jpeg,png,bmp,tga}
|
||||
do
|
||||
filename=$(basename "$FILE")
|
||||
#extension=${filename##*.}
|
||||
filename=${filename%.*}
|
||||
|
||||
echo -e "${italic}Convert $FILE${reset}"
|
||||
|
||||
mozcjpeg -quality $moz_quality -outfile "$dest_folder/$filename.jpg" "$FILE"
|
||||
done
|
||||
|
||||
fi
|
||||
# which mozjpegtran
|
||||
# /usr/local/bin/mozjpegtran
|
||||
# which mozcjpeg
|
||||
# /usr/local/bin/mozcjpeg
|
||||
|
||||
|
||||
echo -e "\n<Press Enter to quit>"
|
||||
read -pr ""
|
||||
|
||||
open "$dest_folder"
|
||||
|
||||
}
|
||||
|
||||
_avif() {
|
||||
clear
|
||||
echo "avif"
|
||||
|
||||
bin=$(command -v avifenc || command -v cavif || command -v magick || command -v heif-enc || command -v squoosh-cli)
|
||||
if [ "$bin" = "" ]; then
|
||||
echo -e "${bold}convertimage${reset} require ${bold}avifenc, cavif, magick, heif-enc or squoosh-cli${reset} but none is installed."
|
||||
echo -e " -for avifenc, run ${italic}brew install libavif${reset} (https://github.com/AOMediaCodec/libavif)"
|
||||
echo -e " -for cavif, run ${italic}go install cavif${reset} (https://github.com/kornelski/cavif-rs)"
|
||||
echo -e " -for magick, run ${italic}brew install imagemagick${reset} (https://imagemagick.org)"
|
||||
echo -e " -for heif-enc, run ${italic}${reset}"
|
||||
echo -e " -for squoosh-cli, run ${italic}npm i -g @squoosh/cli${reset}"
|
||||
echo -e "Aborting..." >&2;
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$(command -v avifenc)" != "" ]; then
|
||||
bin=avifenc
|
||||
elif [ "$(command -v magick)" != "" ]; then
|
||||
bin=magick
|
||||
elif [ "$(command -v heif-enc)" != "" ]; then
|
||||
bin=heif-enc
|
||||
elif [ "$(command -v squoosh-cli)" != "" ]; then
|
||||
bin=squoosh-cli
|
||||
elif [ "$(command -v cavif)" != "" ]; then
|
||||
bin=cavif
|
||||
fi
|
||||
|
||||
# avifenc -> brew install libavif
|
||||
# avifenc --min 0 --max 63 -a end-usage=q -a cq-level=18 -a tune=ssim --jobs 8 $img $avif_out (jpg|jpeg|png) (pas d'exif)
|
||||
# avifenc -l --jobs 8 $img $avif_out (lossless)
|
||||
|
||||
# cavif -> go install cavif
|
||||
# cavif --quality $quality $img -o $avif_out (jpeg ou png) (pas d'exif)
|
||||
|
||||
# libheif
|
||||
# heif-enc "$img" -A -L -p chroma=444 --matrix_coefficients=0 -o "$avif_out" (lossless)
|
||||
# heif-enc "$img" -A -q $quality -o "$avif_out" (jpg|jpeg|png) (pas d'exif)
|
||||
|
||||
# magick -> brew install imagemagick
|
||||
# convert -define heic:speed=2 png/2022-04-16_Brocard_8990_8b.png magick/2022-04-16_Brocard_8990_8b_2.avif (jpg|jpeg|png|tif) (pas d'exif)
|
||||
|
||||
# squoosh-cli -> npm i -g @squoosh/cli
|
||||
#squoosh-cli --output-dir 'squoosh-cli' --avif '{"cqLevel":33, "cqAlphaLevel":-1, "denoiseLevel":0, "tileColsLog2":0, "tileRowsLog2":0,"speed":6, "subsample":1, "chromaDeltaQ":false, "sharpness":0, "tune":0 }' png/*.png (jpg|jpeg|png) (pas d'exif)
|
||||
|
||||
|
||||
if [ "$avif_lossless" = true ]; then
|
||||
|
||||
for FILE in "${SRC}"/**/*.{mkv,avi,mp4,m4v}
|
||||
do
|
||||
echo "$FILE"
|
||||
done
|
||||
else
|
||||
for FILE in "${SRC}"/**/*.{mkv,avi,mp4,m4v}
|
||||
do
|
||||
echo "$FILE"
|
||||
done
|
||||
fi
|
||||
|
||||
echo -e "\n<Press Enter to quit>"
|
||||
read -pr ""
|
||||
}
|
||||
|
||||
_webp() {
|
||||
clear
|
||||
count=0
|
||||
|
||||
bin=$(command -v cwebp || command -v mozcjpeg)
|
||||
if [ "$bin" = "" ]; then echo -e "${bold}convertimage${reset} require ${bold}cwebp${reset} but it's not installed.\nRun ${italic}(brew install webp)${reset}\nAborting..." >&2; exit 1; fi;
|
||||
|
||||
vers=$(cwebp -version)
|
||||
echo -e "\n${bold}webp converter${reset}"
|
||||
echo -e "cwebp v$vers\n"
|
||||
|
||||
|
||||
for FILE in "${folder}"/**/*.{jpg,jpeg,png,tif,tiff}
|
||||
do
|
||||
filename=$(basename "$FILE")
|
||||
#extension=${filename##*.}
|
||||
filename=${filename%.*}
|
||||
|
||||
echo -e "\n${italic}Convert $FILE${reset}\n"
|
||||
|
||||
if [ "$webp_lossless" = true ]; then
|
||||
cwebp -lossless "$FILE" -mt -o "$dest_folder/$filename.webp"
|
||||
else
|
||||
cwebp -q $webp_quality -mt "$FILE" -o "$dest_folder/$filename.webp"
|
||||
fi
|
||||
((count++))
|
||||
done
|
||||
|
||||
echo -e "\n$count images were successfully converted !"
|
||||
|
||||
echo -e "\n<Press Enter to quit>"
|
||||
read -pr ""
|
||||
|
||||
open "$dest_folder"
|
||||
}
|
||||
|
||||
_heic() {
|
||||
clear
|
||||
count=0
|
||||
|
||||
bin=$(command -v sips)
|
||||
if [ "$bin" = "" ]; then echo -e "${bold}convertimage${reset} require ${bold}sips${reset} but it's not installed.\n${bold}sips${reset} is a part of macOS\nAborting..." >&2; exit 1; fi;
|
||||
|
||||
echo -e "\n${bold}heic converter${reset}\n"
|
||||
|
||||
for FILE in "${folder}"/**/*.{jpg,jpeg,tif,png,bmp,tga}
|
||||
do
|
||||
filename=$(basename "$FILE")
|
||||
#extension=${filename##*.}
|
||||
filename=${filename%.*}
|
||||
|
||||
echo -e "${italic}Convert $FILE${reset}"
|
||||
|
||||
sips -s format heic -s formatOptions $sips_quality "$FILE" --out "$dest_folder/$filename.heic"
|
||||
((count++))
|
||||
done
|
||||
|
||||
echo -e "\n$count images were successfully converted !"
|
||||
|
||||
echo -e "\n<Press Enter to quit>"
|
||||
read -pr ""
|
||||
|
||||
open "$dest_folder"
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
main
|
||||
Reference in New Issue
Block a user