Как разделить изображение вертикально с помощью командной строки?

Я действительно хочу сказать, "не делают", поскольку это не лучшая идея. Однако это не отвечает на Ваш вопрос, поэтому давайте сделаем это вместо этого. Вот несколько предположений в сценарии, который я создаю ниже:

  • Вы создали группу вызываемые пользователи
  • У всех пользователей, которых Вы хотите добавить к этой группе, есть uid между 500 и 10000
  • Только у пользователей, которых Вы хотите добавить к этой группе, есть uid между 500 и 10000
  • Вы поймете то, что сценарий оболочки делает прежде, чем выполнить его или иначе просит разъяснение.

Сначала мы фиксируем владение папок в / домой:

chgrp users -r /home

Поэтому сначала давайте получим всех пользователей с uid 500 или выше:

getent passwd | awk -F: '{if($3 > 500 && $3 < 10000) { print $1 }}'

В моей системе это возвращается:

dennis
paul
tom

Теперь мы должны изменить группу:

for user in $(getent passwd | awk -F: '{if($3 > 500 && $3 < 10000) { print $1 }}'); do
    usermod -g users $user
done

Теперь можно удалить больше необходимые группы:

for user in $(getent passwd | awk -F: '{if($3 > 500 && $3 < 10000) { print $1 }}'); do
    groupdel $user
done
19
19.02.2018, 04:18
3 ответа

@ JW013 дал допустимое объяснение и решение.

Но могут быть некоторые случаи, когда вы хотите процитировать пути, например Когда они содержат несколько пробелов или специальные символы. В этом случае вы должны использовать $ Home вместо ~ ~ , то есть ваша База = «~ / z» станет BASE = «$ HOLE / Z " и работа правильно, потому что замена параметра интерпретируется в двойных цитатах, в отличие от расширения Tilde.

-121--31505-

Вы могли бы использовать

find /proc/[0-9]*/fd/ -name 24 2> /dev/null | wc -l

или, если вы настаиваете на использовании LS (это должно быть одним из несколько примеров , где он безопасен Сэй):

ls /proc/[0-9]*/fd 2>/dev/null | grep -c '^24$'

Ваша первая попытка не удалась, потому что вы перенаправляете вывод в файл (> output.txt ), что означает, что GREP никогда не будет соответствовать, так как у него не было вывод, чтобы соответствовать. Вы могли бы либо использовать трубы ( | ), как я сделал выше или, используйте ; ; & для разделения команд:

ls /proc/[0-9]*/fd 2> errors.txt > stdout.txt; grep "^24" stdout.txt | wc -l
-121--120240-

Решил его с помощью конвертации геометрии-CROP + RETAGE:

convert -crop 100%x20% +repage image.png image.png
28
27.01.2020, 19:44

Использование ImageMagick:

$ convert -crop 800x1000 image.png cropped_%d.png

создаст последовательность файлов с именем Croped_1.png , , CRAIND_2.PNG и так далее.

Ссылки

23
27.01.2020, 19:44

ImageMagick зависал у меня, так как изображение было слишком большим для его обработки, поэтому мне пришлось прибегнуть к другим методам.

В итоге я использовал Python Image Library.

Далее следует быстрый и грязный ответ на вопрос OP:

from PIL import Image

im = Image.open("YourImage.yourformat")

for h in range(0, im.height, 1000):
     nim = im.crop((0, h, im.width-1, min(im.height, h+1000)-1))
     nim.save("PartialImage." + str(h) + ".yourformat")

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

1
20.08.2021, 12:42

Теги

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