Imagemagick конвертирует в плитки имени, поскольку строка / столбец не работает должным образом с -extent - PullRequest
1 голос
/ 08 мая 2019

У меня есть изображение 5120 × 4352, которое я обрезаю на плитки размером 2048x2048. Я хочу назвать мои обрезанные плитки как

  • tile_0_0.png
  • tile_0_1.png
  • tile_0_2.png
  • tile_1_0.png
  • tile_1_1.png
  • tile_1_2.png
  • ...

Но эта команда:

convert image.png -crop 2048x2048 -gravity northwest \ 
-extent 2048x2048 -transparent white  \ 
-set 'filename:tile' '%[fx:page.x/2048]_%[fx:page.y/2048]'  \ 
+repage +adjoin 'tile_%[filename:tile].png'

Дает мне этот результат:

  • tile_0_0.png
  • tile_0_1.png
  • tile_0_16.png
  • tile_1_0.png
  • tile_1_1.png
  • tile_1_16.png
  • tile_4_0.png
  • tile_4_1.png
  • tile_4_16.png

Я подозреваю, что это имеет отношение к плиткам в последней строке и столбце не полностью 2048x2048, но команда экстента делает конечный результат все еще 2048, но как я могу использовать это с плитками и именами файлов?

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

convert image.png -gravity northwest \
-extent 2048x2048 -transparent white bigger.png

Но было бы неплохо сделать это одним махом:)

1 Ответ

1 голос
/ 09 мая 2019

Используя ImageMagick, вы можете установить область просмотра, которая будет достаточно больше, чем входное изображение, чтобы оно делилось равномерно на 2048. Тогда искажение без операции увеличит область просмотра до этого размера.Таким образом, "-crop 2048x2048" создаст части, которые уже имеют площадь 2048.

Вот пример команды, которую я обработал в Windows, и я почти уверен, что перевел ее для правильной работы как команда * nix.

convert image.png \
   -set option:distort:viewport '%[fx:w-(w%2048)+2048]x%[fx:h-(h%2048)+2048]' \
   -virtual-pixel none -distort SRT 0 +repage -crop 2048x2048 \
   -set 'filename:tile' '%[fx:page.x/2048]_%[fx:page.y/2048]' \
   +repage +adjoin 'tile_%[filename:tile].png'

Операция "-distort SRT" не делает ничего, кроме расширения области просмотра до размеров, которые делятся равномерно к 2048 году, в результате получается результат, аналогичный выполнению "-extent" перед кадрированием.И «-virtual-pixel none» оставит прозрачный фон в областях переполнения.

Отредактировано, чтобы добавить: Формула для расширения области просмотра в вышеупомянутой команде неправильно добавит еще 2048 пикселей, даже если измерение ужеделится на 2048. Он также дает неверный результат, если размерность меньше 2048. Попробуйте использовать формулу, подобную этой, для настройки области просмотра для обработки этих условий ...

'%[fx:w+(w%2048?2048-w%2048:0)]x%[fx:h+(h%2048?2048-h%2048:0)]'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...