2

У меня есть изображение, которое содержит меньшие изображения, подобные этому:

------
| 1  |
------
| 2  |
------
| 3  |
------
| 4  |
------

Каждое изображение 100x200, а изображение 100x800

Я хотел бы объединить их все в одну анимацию, которая будет проходить по изображениям с 1 по 4.

Я использую инструмент convert imagemagick, чтобы обрезать изображения. Например, я сделал командный файл

convert %1 -crop 100x200+0+0 %~n1_01.png
convert %1 -crop 100x200+0+200 %~n1_02.png
convert %1 -crop 100x200+0+400 %~n1_03.png
convert %1 -crop 100x200+0+600 %~n1_04.png

А затем запустите его на образе с именем main.jpg

Это создает набор изображений, но когда я пытаюсь преобразовать их в GIF, как это

convert *.png out.gif

Вместо одной анимации размером 100x200 я получаю анимацию размером 100x800, и изображения просто появляются с определенными смещениями.

Когда я identify пару обрезанных изображений, это дает мне

main_01.png PNG 100x200 100x800+0+0 8-bit sRGB 4.74KB 0.000u 0:00.000
main_02.png PNG 100x200 100x800+0+200 8-bit sRGB 3.39KB 0.000u 0:00.000

Предположительно, imagemagick пытается помочь, читая метаданные и определяя, что я на самом деле хотел бы использовать холст размером 100x800, и каждое изображение должно быть размещено с определенными смещениями. Что не то, что я хочу.

на самом деле, читая учебник, imagemagick действительно поможет вам в этом.

То есть IM сохраняет информацию об изображении «виртуальный холст», «страницу» или «наслоение», чтобы сохранить ее для последующего использования. Это особенно важно для правильной работы с GIF-анимацией.

Когда я открываю каждый файл вручную в рисовании и затем повторно сохраняю его, когда я повторно идентифицирую main_02.png , я получаю

main_02.png PNG 100x200 100x200+0+0 8-bit sRGB 4.03KB 0.000u 0:00.000

Делая это для всех изображений, я снова делаю преобразование в gif, и, наконец, это gif 100x200, который выглядит так, как я хочу.

Как я могу установить все смещения на (0, 0), чтобы мне не пришлось делать это вручную при рисовании?

1 ответ1

1

Вы можете сбросить координаты виртуального холста, выполнив +repage после обрезки:

convert %1 -crop 100x200+0+0 +repage %~n1_01.png
convert %1 -crop 100x200+0+200 +repage %~n1_02.png
convert %1 -crop 100x200+0+400 +repage %~n1_03.png
convert %1 -crop 100x200+0+600 +repage %~n1_04.png

Также вам не нужен командный файл, чтобы разбить изображение на плитки; если вы укажете только размер, он будет разделен на плитки для вас, используйте «% d» в имени выходного файла для номера плитки:

convert %1 -crop 100x200 +repage %~n1_%d.png

Или в вашем случае с двузначным числом фиксированной ширины:

convert %1 -crop 100x200 +repage %~n1_%02d.png

Это создаст четыре изображения.

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

convert %1 -crop 100x200 +repage out.gif

Для получения дополнительной информации см. Документацию по -crop а также +repage (обратите внимание, что -repage также может использоваться для самостоятельного редактирования данных виртуального холста в любом изображении).


Кстати, альтернативный способ разделения изображений - указать количество плиток вместо размера плиток; Вы можете сделать это, указав размер в кадрах для обрезки и добавив знак «@», например, это даст те же результаты, что и выше:

convert %1 -crop 1x4@ +repage %~n1_%02d.png

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .