ホーム>source

ImageMagickを使用してPDFからサムネイルを作成するためのシェルスクリプトを作成しました。ステップバイステップでガイドし、入力に基づいてサムネイルを作成します。

現在、 "$page"の部分を再作成しようとしています。一度に入力として使用できるのは1つのページ(数値)のみです。そして、スクリプトが同時に複数のページ入力を読み取ることができるようにしたい(カンマで区切られた数値またはspace)-それらを配列に保存し、この配列を「CONVERT」関数の変数($page)として使用します...

誰かがアイデアを持っていますか?

ありがとうございました!

これがコードです:

<前>ウィズウィズ # 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
あなたの答え
  • 解決した方法 # 1

    ウィズウィズ   read があります  配列に読み込むオプション:

    <前>ウィズウィズ

  • 解決した方法 # 2

    Imagemagickでは、入力名と同じ出力名を使用して数値インデックスを追加する場合は、1つのコマンドラインで複数の画像または1つの画像のページに透かしを入れてサムネイルを付けることができます。これを行うには、入力の後にnull:セパレーターを含め、透かしを行うために単に-compositeではなく-layers compositeを使用します。

    入力:

    ここでは、特別なImagemagickの内部ローズを使用します:画像をアニメーションの2番目と3番目の画像(または、必要に応じてPDFファイル)に透かしを入れ、50%縮小します。 rose:を適切なimage.suffixに置き換えることができます。

    <前>ウィズウィズ


    結果の2つの画像:

    3images_thumbs_1.png

    3images_thumbs_2.png

  • 解決した方法 # 3

    私はようやくそれを行う方法を見つけました!

    <前>ウィズウィズ

    少し「乱雑」に見えますが、機能します。コードを「よりクリーン」にする方法がわかった場合は、お知らせください。

    -a

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ ubuntu - プログラムがcでPipe()を使用してread()でスタックする