У меня есть изображение, содержащее более мелкие изображения, подобные этому:
------
| 1 |
------
| 2 |
------
| 3 |
------
| 4 |
------
Каждое подизображение имеет размер 100x200, а полное изображение — 100x800.
Я хотел бы объединить их все в одну анимацию, которая будет циклически показывать изображения с 1 по 4.
Я использую инструмент imagemagick convert
для обрезки изображений. Например, я сделал пакетный файл
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-анимации.
Когда я вручную открываю каждый файл в Paint, а затем повторно сохраняю его, при повторной идентификации 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), чтобы мне не пришлось делать это вручную через Paint?
решение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