commit ba2d06701de83800789f62f9a3fb4b13fc7121da Author: jo Date: Tue Dec 10 16:04:37 2024 +0000 Add preprocess_png_sticoeureuse.sh diff --git a/preprocess_png_sticoeureuse.sh b/preprocess_png_sticoeureuse.sh new file mode 100644 index 0000000..9d25cf7 --- /dev/null +++ b/preprocess_png_sticoeureuse.sh @@ -0,0 +1,114 @@ +#!/bin/bash + +print_usage() { + printf "$License + +Pour preprocess (resize, dither, potentiellement rotate) pour imprimer avec la stickerheureuse (TM) + +Usage: \"./preprocess_png_sticoeureuse.sh -i input.jpg/png ...\" + + -h help + + -i fichier d'entrée. + Si les options \"-r\" ou \"-a\" sont utilisé, alors -i sera le dossier d'entrée. + Si rien n'est fournie alors le dossier d'entrée sera le dossier depuis lequel vous exécutez ce script. + + -o nom du fichier de sortie (si rien n'est precisé, le fichier de sortie sera \"{input}_preprocessed.png\". + + -s inverse le sens de l'image (par default le coté le moins long est la largeur du ruban) + + -W fixer la largeur du ruban en pixel (default = 719 ~ 720 pour un ruban de 62mm) + + -a faire l'operation pour tout les fichier image dans le dossier. + + -r le faire pour tout les fichier image dans le dossier et recursivement dans tout les dossier en dessous. + + -f [déconseilé] si ce flag est présent, le program reconvertira les fichier qui se finissent par \"_preprocessed\". + + -N [déconseilé] n'utilise pas de courbe de calibration (utile pour la calibration. Courbe calibré sur une QL700) +" +} + +curve="0/0 0.3/0.45 0.5/0.6 0.7/0.65 0.85/0.75 1/1" + +input= +output= +all=false +recursive=false +include=false +turn=">" +width=719 +while getopts 'i:o:sW:Narfh' flag; do + case "${flag}" in + h) print_usage; + exit 1;; + i) input="${OPTARG}";; + o) output="${OPTARG}";; + s) turn="<";; + a) all=true;; + r) all=true; recursive=true;; + f) include=true;; + W) width="${OPTARG}";; + N) curve="0/0 1/1";; + esac +done + +echo ${input} + +if [ "${all}" = "true" ]; then + find_all() { + first=1 + for ext in "$@"; do + if [[ $first == 1 ]]; then + find_filter=(-iname "*.$ext") + first=0 + else + find_filter+=( -o -iname "*.$ext") + fi + done + + additional_flag="" + if [ $recursive == false ] ; then + additional_flag+="-maxdepth 1" + fi + + echo "$(find . ${additional_flag} -type f \( "${find_filter[@]}" \) | cut -b 3-)" + } + + if [ ! -z "${input}" ]; then + cd ${input} + fi + + all=$(find_all "jpg" "jpeg" "png" "pdf" "PNG" "JPG") + OIFS="$IFS" + IFS=$'\n' + for file in $all; do + output="${file%.*}_preprocessed.png" + + if [[ "${file%.*}" = *_preprocessed ]] && [ ${include} = false ]; then + continue + fi + + if [ "$(( $(identify -format "%w ${turn} %h" ${file}) ))" = "1" ]; then + ffmpeg -i ${file} -frames:v 1 -vf scale=-1:719:force_original_aspect_ratio=decrease,curves=m="${curve}",hue=s=0,format=monob -pix_fmt rgb32 ${output} -y + else + ffmpeg -i ${file} -frames:v 1 -vf scale=719:-1:force_original_aspect_ratio=decrease,curves=m="${curve}",hue=s=0,format=monob,transpose=1 -pix_fmt rgb32 ${output} -y + fi + done + IFS=$OIFS +else + if [ -z "${input}" ]; then + echo "No input file provided !" 1>&2 + exit 1 + fi + + if [ -z "${output}" ]; then + output="${input%.*}_preprocessed.png" + fi + + if [ "$(( $(identify -format "%w ${turn} %h" ${input}) ))" = "1" ]; then + ffmpeg -i ${input} -frames:v 1 -vf scale=-1:719:force_original_aspect_ratio=decrease,curves=m="${curve}",hue=s=0,format=monob -pix_fmt rgb32 ${output} -y + else + ffmpeg -i ${input} -frames:v 1 -vf scale=719:-1:force_original_aspect_ratio=decrease,curves=m="${curve}",hue=s=0,format=monob,transpose=1 -pix_fmt rgb32 ${output} -y + fi +fi