Измените размер только больших изображений к маленькому, не изменяя отношение высоты/ширины

У меня есть папка красочных изображений в PNG и JPEG. При помощи file в Linux я вижу, что изображения PNG - все PNG image data, ... x ..., 8-bit/color RGBA, non-interlaced где их высота и ширина отличаются. И изображения JPEG - все JPEG image data, JFIF standard 1.01. Их размер может составить 500KB.

Я могу использовать find . -type f -size +10k -exec ls -l {} \; перечислять все изображения, размер которых выше 10Kb.

Я могу также использовать convert input.png -geometry x150 output.png изменить размер высоты одного изображения к 150px не изменяя отношение высоты/ширины. или mogrify -geometry x150 * изменить размер всех изображений в папке.

Делает любой знает, как объединение, эти 2 команды и изменяют размер всех изображений, размер которых выше 10Kb в папке?

1
задан 17 April 2018 в 09:18

3 ответа

Я предполагаю, что в текущем каталоге есть только файлы изображений. Если нет, вы можете указать две команды: одну с -name "*.jpg" и одну с -name "*.png".

Попробуйте эту команду, чтобы увидеть, какие файлы выбраны (избегайте уничтожения файлов, которые вы хотите сохранить),

find . -type f -name "*" -size +10k -exec echo mogrify -geometry x150 {} \;

и, если все в порядке, удалите echo, чтобы использовать эту команду для сжатия слишком больших файлов. большой

find . -type f -name "*" -size +10k -exec mogrify -geometry x150 {} \;

Возможно, размер 10k не соответствует -geometry x150, поэтому вы должны изменить его в зависимости от типа изображений.

1
ответ дан 3 December 2019 в 06:52

Это создаст папку с вашими изображениями с измененным размером, не будет касаться исходных файлов и поместит туда изображения с измененным размером.

Это зарезервирует ваши исходные изображения, которые вы можете заменить, если вы удовлетворены новыми изображениями с измененным размером.

#!/bin/bash

[ ! -d resized ] && mkdir resized

while read image; do
    echo "Resizing [$image] to [resized/$image]"
    convert $image -geometry x150 "resized/$image"
done < <(find . -type f -size +10k -exec ls {} \;)
1
ответ дан 3 December 2019 в 06:52

Почему бы не выполнить преобразование от находки?

find . -type f -size +10k -exec convert {} -geometry x150 {}.png \;

Вы должны rename файлы от *.pic.png к чему-то полезному. Но это должно работать.

2
ответ дан 3 December 2019 в 06:52

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

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