Как я записал бы сценарий оболочки для сжатия повторных изображений с imagemagick?

В настоящее время я использую эту команду в терминале для сжатия единственного изображения с imagemagick:

./convert_with_logging photo.jpg -quality 50% photo2.jpg

convert_with_logging является сценарием, который содержит:

INPUT_FILENAME="$1"
OUTPUT_FILENAME="$4"

ORIGINAL_SIZE=$(wc -c "${INPUT_FILENAME}" | cut -d ' ' -f1)
convert "$@"
COMPRESSED_SIZE=$(wc -c "${OUTPUT_FILENAME}" | cut -d ' ' -f1)

echo "${OUTPUT_FILENAME} | saved size: $(expr $ORIGINAL_SIZE - $COMPRESSED_SIZE)"

Примечание: этот сценарий преобразовывает, и он также регистрирует сжатый размер (исключая: imageA.jpg | сохраненный размер: 1994825)

Теперь в настоящее время я использую эту команду для сжатия повторных изображений (которые являются jpg и jpeg):

for PHOTO in /home/dvs/Desktop/proj1/src/images/*.{jpeg,jpg}
   do
       BASE=`basename $PHOTO`
    ./convert_with_logging "$PHOTO" -quality 40% "/home/dvs/Desktop/proj1/src/compressed/$BASE"
   done; 

Теперь, как я могу преобразовать всю эту последнюю команду, чтобы ввести "./convert_multi_with_logging" и получить тот же результат?

Я думаю, что мы должны добавить что-то вроде этого к сценарию:

inpath="/home/dvs/Desktop/proj1/src/images/"

outpath="/home/dvs/Desktop/proj1/src/compressed/"
0
задан 26 August 2018 в 09:39

1 ответ

Измените свой сценарий на что-то вроде этого:

for PHOTO in "$1"/*.{jpeg,jpg};
do

    OUTPUT_FILENAME="$(basename "$PHOTO")"
    ORIGINAL_SIZE=$(wc -c "${PHOTO}" | cut -d ' ' -f1)

    convert "$PHOTO" $2 $3 "$4/${OUTPUT_FILENAME%.*}.cnvrt"
    COMPRESSED_SIZE=$(wc -c "$4/${OUTPUT_FILENAME%.*}.cnvrt" | cut -d ' ' -f1)
    echo "${OUTPUT_FILENAME%.*}.cnvrt | saved size: $(expr $ORIGINAL_SIZE - $COMPRESSED_SIZE)"

done

и выполните его с этими аргументами.

./convert_multi_with_logging /path/to/source -quality 50% /path/to/destination
4
ответ дан 28 October 2019 в 02:10

Другие вопросы по тегам:

Похожие вопросы: