У меня есть столько различных изображений в каталоге с последовательными именами 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
Таким образом, Какова проблема? Как я могу зафиксировать его?
Я рекомендовал бы использовать 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). Теперь, если эти условия соблюдают, мы предполагаем, что можем удалить входной файл.