2015-08-05 4 views
0

Я написал следующий скрипт, который использует утилиту ImageMagick * convert для добавления меток осей к существующему изображению.Путь по отношению к углу изображения

LEFT_="l -30,0 +2,+2 -6,-2 +6,-2 -2,+2 z" 
RIGHT_="l 30,0 -2,+2 +6,-2 -6,-2 +2,+2 z" 
convert -size 240x160 pattern:SMALLFISHSCALES \ 
    -pointsize 16 -fill black -background white \ 
    -gravity SouthEast -splice 0x20 \ 
    -draw "translate 40,0 text 0,0 'Time' stroke red path 'm 5,2 $RIGHT_'" \ 
    -gravity NorthWest -splice 20x0 \ 
    -draw "rotate +90 translate 40,-10 text 0,0 'Value' path 'm -5,2 $LEFT_'" \ 
    example.png 

Который производит следующее изображение:

convert command output

Это почти то, что я после этого, за исключением того, что красная стрелка неуместна. Я ожидал, что красная стрелка появится рядом с меткой Time, так как ее начальная точка указывается как относительное положение в той же команде рисования. К сожалению, похоже, что опция -gravity влияет на примитив text, но не на примитив path.

Есть ли способ ссылки на юго-восточный угол или текстовую метку Time при указании начальной позиции красной стрелки? Я не могу использовать абсолютные координаты, потому что размер изображения меняется.

ImageMagick * 6.7.8-9 на CentOS 7

ответ

1

Обновлено Ответ

Может быть, вы можете сделать Unicode текстовые стрелки, как это, то они будут затронуты действием силы тяжести ...

perl -e 'binmode(STDOUT,":utf8"); print "Time ... \x{2192}\x{2191}";'| 
    convert -font TimesNewRoman -pointsize 36 label:@- arrows.png 

enter image description here

В зависимости от вашей ОС в качестве замены для Пер л выше ...

printf "%b" "\u2192" | convert ... 

Оригинал ответа

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

Вместо того, чтобы использовать -splice, вы можете клонировать исходное изображение и обрезать его до размера, который вы планировали сплайсировать, а затем -append полоски, обозначающие оси. Легче показать вам команду, чем объяснить ее!

convert -size 240x160 pattern:SMALLFISHSCALES   \ 
    \(+clone -crop x20+0+0 -fill blue -colorize 100% \) \ 
    -append            \ 
    \(+clone -crop 20x+0+0 -fill red -colorize 100% \) \ 
    +swap +append result.png 

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

Два сложных вещей, чтобы отметить ...

-append будет добавлять второе изображение ниже первый

+append будет добавлять второе изображение справа из первых, поэтому я заранее +swap поставить его на левую сторону.

enter image description here

+0

Если меня не хватает чего-то, это все еще оставляет меня с той же проблемой.Как рисовать стрелку на правом краю синего квадрата, если я не знаю заранее, насколько широким будет изображение? – nispio

+0

Извините, я неправильно понял. Я думал, что гравитация, которую вы использовали для сращивания, влияет на гравитацию, которую вы хотели использовать для своих путей, поэтому я по-глупо сделал способ избежать гравитации и сращивания :-) Во всяком случае, у меня была другая попытка сейчас ... –

Смежные вопросы