J'ai créé un script shell pour créer une vignette à partir de PDF avec ImageMagick. Il vous guidera étape par étape, puis créer une vignette en fonction de votre entrée.
Maintenant, j'essaie de refaire une pièce "$ page", car vous pouvez utiliser une seule page (numéro) comme entrée à l'heure .. Et je veux que le script puisse lire plus d'entrées de page à la fois (chiffres séparés par une virgule ou de la virgule) - enregistrez-les sur une matrice, puis utilisez ce tableau comme variable ($ page) dans la fonction "Convertir" ... P>
Quelqu'un a une idée? p>
Merci! P>
Voici le code: p>
# set function CONVERT() { num=0 name=$(basename "$file" .pdf | cut -d- -f1 | sed 's/.$//' | tr ' ' '-') ext="png" mark='/path/to/the/watermark.png' if [[ ! -e "$path"/"$name"_$num.$ext ]]; then echo "Creating thumbnail ..." convert -quiet -density 300 -quality 100 -thumbnail x1815 -background white -alpha remove "$file"[$page] "$path"/"$name"_$num.$ext else while [[ -e "$path"/"$name"_$num.$ext ]]; do (( num++ )) done echo "Creating thumbnail ..." convert -quiet -density 300 -quality 100 -thumbnail x1815 -background white -alpha remove "$file"[$page] "$path"/"$name"_$num.$ext fi while : do read -n 1 -s -p "Add watermark? [Y/n]" watermark case $watermark in ""|[yY] ) echo "" echo "Adding watermark to thumbnail ..." convert -quiet "$path"/"$name"_$num.$ext "$mark" -gravity center -composite "$path"/"$name"_$num.$ext echo "DONE!" exit; ;; [nN] ) echo "" echo "DONE!" exit; ;; * ) echo "" echo "Use only 'y' or 'n' !" esac done } # start echo "" while : do read -e -p "Path to PDF: " file if [[ -d "$file" ]]; then echo "'$file' is a directory" echo "Enter path to PDF File!" elif [[ -z "$file" ]]; then echo "Enter path to file!" elif [[ "$file" = /* ]]; then file=$(echo "$file" | tr -d "\\") break else echo "Enter FULL path!" fi done while : do read -e -p "Page to be converted (leave blank for first): " page if [[ -n ${page//[0-9]/} ]]; then echo "Use numbers only!" elif [[ -z "$page" ]]; then page="0" break else break fi done while : do read -e -p "Path to save: " path if [[ -f "$path" ]]; then echo "'$path' is file" echo "Enter path to save thumbnail into!" elif [[ -z "$path" ]]; then path='/path/to/your/folder' break else break fi done CONVERT
3 Réponses :
lire code> a une option
-A code> à lire dans un tableau:
$ read -r -p 'Enter page numbers: ' -a pages
Enter page numbers: 1 2 3 4 5
$ declare -p pages
declare -a pages=([0]="1" [1]="2" [2]="3" [3]="4" [4]="5")
Merci! Et comment la mettre en œuvre à ma fonction "Convertir"?
@ Strejda603 Vous pouvez boucler sur la matrice avec pour la page dans "$ {pages [@]}"; faire écho "$ page"; fait code>, où au lieu de
echo "$ page" code> vous faites ce que vous voulez.
à ImageMagick, vous pouvez filigraner et vignette plusieurs images ou pages d'une image dans une ligne de commande si vous êtes prêt à utiliser le même nom de sortie que le nom d'entrée et avoir des indices numériques annexés. Pour ce faire, vous incluez un NULL: séparateur après l'entrée et l'utilisation - les liaiseurs composites plutôt que simplement -Composites pour faire le filigrane.
entrée: p>
Ici, j'utilise l'imagemagick spécial Rose interne: image pour filigrane les deuxième et troisième images de la Animation (ou un fichier PDF, si vous voulez), puis la vignette de 50%. Vous pouvez remplacer Rose: avec n'importe quelle image appropriée.Suffix. P> 3Images_thumbs_1.png p> < img src = "https://i.stack.imgur.com/krxtr.png" alt = "Entrez la description de l'image ici"> p> 3Images_thumbs_2.png P>
Résultant 2 image: p>
J'ai enfin découvert, comment faire ça! Il semble un peu "désordonné", mais ça marche! Si vous découvrez, comment faire le code "nettoyeur", s'il vous plaît, faites-moi savoir. P> p>