#!/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 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" "PDF") OIFS="$IFS" IFS=$'\n' for file in $all; do output="${file%.*}_preprocessed.png" if [[ "${file%.*}" = *_preprocessed ]] && [ ${include} = false ]; then continue fi if [[ "${file##*.}" = "pdf" || "${file##*.}" = "PDF" ]] ; then rm_file=true old_file=$file base_file_name=$(basename "${file%.*}") file=".tmp_${base_file_name}.png" magick $old_file $file 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 if [ $rm_file == true ]; then rm_file=false rm ${file} 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 [[ "${input##*.}" = "pdf" || "${input##*.}" = "PDF" ]] ; then rm_file=true old_file=$input base_file_name=$(basename "${input%.*}") input=".tmp_${base_file_name}.png" magick $old_file $input 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 if [ $rm_file == true ]; then rm_file=false rm ${input} fi fi