Как я могу преобразовать все изображения в каталоге к jpg?

У меня есть столько различных изображений в каталоге с последовательными именами 1 2 3 4 ... Я задавался вопросом, было ли возможно преобразовать всех их в jpg и измените размер их всех к 900x900, не сохраняя соотношение сторон.

То, что я попробовал за первую часть:

$ mogrify -format jpg -- *

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

$ mogrify -resize 900x900 -- *
mogrify: insufficient image data in file `109.jpg' @ error/jpeg.c/ReadJPEGImage/1039.
mogrify: no decode delegate for this image format `' @ error/constitute.c/ReadImage/501.
mogrify: no decode delegate for this image format `' @ error/constitute.c/ReadImage/501.
mogrify: no decode delegate for this image format `' @ error/constitute.c/ReadImage/501.
mogrify: no decode delegate for this image format `' @ error/constitute.c/ReadImage/501.

Поскольку я сказал, что названия файлов являются порядковыми номерами. У меня также есть следующее:

$ file * | grep -Po "^\d*: *\K[^:,]*(?=,)" | sort | uniq
ASCII text
GIF image data
JPEG image data
PNG image data

Таким образом, Какова проблема? Как я могу зафиксировать его?

2
задан 21 May 2019 в 09:07

1 ответ

Я рекомендовал бы использовать convert инструмент от ImageMagick:

convert input.png -resize 900x900 output.jpg

-resize опция должна быть довольно очевидной, и формат выходного файла автоматически определяется с помощью его расширения файла.

Для выполнения этого на всех файлах в текущем каталоге попробуйте это:

for inputfile in ./* ; do
    outputfile="${inputfile%.*}.jpg"
    convert "$inputfile" -resize 900x900 "$outputfile" &&
    [[ -e "$outputfile" && "$inputfile" != "$outputfile" ]] && rm "$inputfile"
done

Это возьмет всю переднюю сторону файлов он, текущий каталог (неважно, тип файла), и для каждого входного файла создает соответствующее имя выходного файла путем разделения старого расширения и добавления ".jpg" вместо этого. Затем это использует convert как описано выше, чтобы изменить размер и преобразовать изображение, которое создает новый файл и оставляет оригинал как есть. Если это было успешно (&&), проверьте, существует ли выходной файл и если входное имя файла отличается от имени выходного файла (например, если один из исходных файлов уже был jpg). Теперь, если эти условия соблюдают, мы предполагаем, что можем удалить входной файл.

6
ответ дан 2 December 2019 в 01:42

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

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