удалить дополнительный tilespace из монтажа (ImageMagick) составное изображение?

Это датируется полностью назад к самому первому выпуску Unix, где все стандартные имена файлов были только самое большее 6 символами долго (думать passwd), даже при том, что эта версия поддерживала кричащий 8 символов в имени файла. Большинство команд имело связанный исходный файл, заканчивающийся в .c (например. umount.c), который оставил только 6 символов для базового имени.

Ограничение с 6 символами, возможно, также было пережитком от более ранней версии разработки или наследовалось тогдашней текущей системе IBM, которая действительно имела ограничение с 6 символами. (Ранние реализации C имели предел с 6 символами на идентификаторы — более длительные идентификаторы были приняты, но компилятор только посмотрел на первые 6 символов, таким образом, foobar1 и foobar2 была та же переменная.)

(Я думал, что помнил a umount страница справочника, которая перечислила написание как ошибку неизвестного источника, но я не могу найти его теперь.)

19
14.11.2010, 14:36
3 ответа

Попробуйте что-то вроде этого:

montage file1.jpg file2.jpg -geometry +0+0 -background none output.jpg

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

Для наблюдения демонстрации различия с помощью встроенных изображений попробуйте их и сравните:

$ montage rose: -resize 100x60 rose: -geometry +0+0 -background none montage.jpg
$ display montage.jpg &
$ montage rose: -resize 100x60 rose: montage.jpg
$ display montage.jpg &

Посмотрите использование монтажа.

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

Вот примеры, которые я люблю лучше, чем те, я первоначально отправил выше:

montage \( rose: -resize 100x46\! \) rose: -background gray montage.jpg

enter image description here

montage \( rose: -resize 100x46\! \) rose: -geometry +0+0 -background none montage.jpg

enter image description here

15
27.01.2020, 19:45

Я согласился бы с принятым ответом -geometry +0+0 для удаления дополнительного пространства мозаики, и я добавил бы -mode Concatenate (при определенных условиях).

Кроме того, после того как у Вас есть отличающиеся размеры с montage, становится немного трудным различить между тем, что является "фоном мозаики" (пространство мозаики) по сравнению с "кадром" и "границей" - я теряю след сам часто, таким образом, вот небольшой тестовый сценарий с (активируемыми по щелчку) изображениями:

#$ montage --version # done on:
#Version: ImageMagick 6.6.2-6 2012-08-17 Q16 http://www.imagemagick.org
# pipe to `display` (for preview):
# montage img1.png img3.png img2.png img4.png bmp:- | display

# generate images first
convert -size 200x100 xc:red img1.png
convert -size 300x200 xc:blue img2.png
convert -size 400x300 xc:green img3.png
convert -size 500x400 xc:orange img4.png

# #01: direct montage (-tile 2x2 automatic for four images)
# note: mont01.png is 256x252 pixels!
montage img1.png img3.png img2.png img4.png \
  mont01.png

mont01

# "The 'tile' size is then set to the largest dimentions
# of all the resized images, and the size actually specified."
# "by removing the 'size' component, non of the images will
# be resized, and the 'tile' size will be set to the largest
# dimensions of all the images given"

# #02: specify -geometry offset (tile spacing)
# note: mont02.png is 1008x808 pixels now!
montage img1.png img3.png img2.png img4.png \
  -geometry +2+2 \
  mont02.png

mont02

# #03: add border to command #02:
# border sticks around images themselves
montage img1.png img3.png img2.png img4.png \
  -geometry +2+2 -border 5 \
  mont03.png

mont03

# #04: add frame to command #02:
# frame is around the tile (and is "3D") - and
# background (which isn't image) is colored default gray:
montage img1.png img3.png img2.png img4.png \
  -geometry +2+2 -frame 5 \
  mont04.png

mont04

# #05: add background color spec to command #04:
# that is background behind the tiles - not of the tiles
montage img1.png img3.png img2.png img4.png \
  -geometry +2+2 -frame 5 -background "brown" \
  mont05.png

mont05

# #06: add mattecolor to command #05:
# "-mattecolor The color used as the frame color."
# but just changes color of the "3D" frame borders
montage img1.png img3.png img2.png img4.png \
  -geometry +2+2 -frame 5 -mattecolor "white" -background "brown" \
  mont06.png

mont06

# #07: add bordercolor  to command #05:
# "-bordercolor   The fill color inside the frame for images, or any border padding."
# this does change the color of time background
montage img1.png img3.png img2.png img4.png \
  -geometry +2+2 -frame 5 -bordercolor "purple" -background "brown" \
  mont07.png

mont07

# #08: both frame and border :
# no difference from command #07 -
# once the tiles are resized, the entire remaining
# background is used as a "border", and specifying
# "-border 5" size for it has no effect
montage img1.png img3.png img2.png img4.png \
  -geometry +2+2 -frame 5 -border 5 -bordercolor "purple" \
  mont08.png

mont08

# #09: add mode Concatenate (with -tile) to #08
# No difference from #08
montage img1.png img3.png img2.png img4.png \
  -mode Concatenate -tile 2x2 -geometry +2+2 -frame 5 -border 5 -bordercolor "purple" \
  mont09.png

mont09

# #10 remove -frame, from #09
# now there is no tile background, and
# images are not centered in tiles (they
# have gravity NorthWest instead)
montage img1.png img3.png img2.png img4.png \
  -mode Concatenate -tile 2x2 -geometry +2+2 -border 5 -bordercolor "purple" \
  mont10.png

mont10

# #11 Mode Concatenate with only -tile
# images are without padding (as much as possible)
montage img1.png img3.png img2.png img4.png \
  -mode Concatenate -tile 2x2 -border 5 -bordercolor "purple" \
  mont11.png

mont11

# #12 Try geometry +0+0 instead of concatenate
# almost the same as #11, except more correct overall borders
montage img1.png img3.png img2.png img4.png \
  -tile 2x2 -geometry +0+0 -border 5 -bordercolor "purple" \
  mont12.png

mont12

Ну, надейтесь, что это может быть найдено полезным,
Удачи!


Править: Я соединил маленький Python/Tkinter/PIL GUI для ImageMagick, tkGui_ImageMagick.py - и наконец я мог найти надлежащую командную строку для чего-то, что я хотел: сделать монтаж четырех изображений, где высота мозаик и ширина подобраны к тому, что самая большая ширина того столбца (или высота строки).

В этом примере img1 (200x100) и img2 (300x200) входят в первый столбец, большая ширина 300 - который должен установить ширину мозаики img1. Кроме того, img1 должен иметь, это - высота, коррелируемая к большей высоте img3 (300 пкс), с которыми это формирует строку. Это может быть указано через extent оператор (см. также ImageMagick • Тема представления - Изменяет размер и заполняет вместо фрагмента). И та командная строка требует, чтобы вызовы подпроцесса отделились montages для каждого столбца - и оттуда, отдельный converts для каждого изображения:

montage \
  <(montage \
    <(convert \
      img1.png -gravity center -extent 300x300  \
      bmp:-) \
    <(convert \
      img2.png -gravity North -extent x400  \
      bmp:-) \
  -tile 1x -geometry +0+0  \
  bmp:-) \
  <(montage \
    <(convert \
      img3.png -gravity center -extent 500x  \
      bmp:-) \
    img4.png \
  -tile 1x -geometry +0+0  \
  bmp:-) \
-geometry +0+0 -border 2 \
mont13.png

# or as one liner:

montage <(montage <(convert img1.png -gravity center -extent 300x300  bmp:-) <(convert img2.png -gravity North -extent x400  bmp:-) -tile 1x -geometry +0+0  bmp:-) <(montage <(convert img3.png -gravity center -extent 500x  bmp:-) img4.png -tile 1x -geometry +0+0  bmp:-) -geometry +0+0 -border 2 mont13.png

mont13

Отметьте здесь, если мы использовали -extents непосредственно в строке монтажа, как это:

montage \
    img1.png -extent 300x200 -gravity center \
    img2.png -extent 0x400 -gravity North \
    -tile 1x -geometry +0+0  \
  bmp:-

... мы заметим, что первая спецификация для высоты (200) будет проигнорирована, и 400, поскольку больше будет применен к обеим мозаикам так или иначе!

Таким образом мы должны управлять дополнением каждого отдельного изображения (путем вызова convert с extents для каждого) - и затем избегают extents в montage строка; и как таковой, мы должны apriori знать (самую большую) ширину каждого столбца (и высота каждой строки). Отметьте также:

  • Так как img1 меньше, чем подразумеваемая ширина/высота его соседей, мы должны явно установить и ширину и высоту в его степенях
  • Другой размер может иметь только соответствующий указанный размер - и img4, как самый большой, не должен быть дополнен (и пробежал convert) вообще
  • В montage, обычно -gravity должен прибыть после (полностью указанный: w и h) -extent; в convert, -gravity работы прежде -extent (обычно)
14
27.01.2020, 19:45
[115079]Не с [115481]монтажом[115482], а с большей точностью:


x500[115484] - желаемая конечная высота[115082].

3
27.01.2020, 19:45

Теги

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