142 lines
3.7 KiB
Bash
142 lines
3.7 KiB
Bash
#!/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
|