Я хочу нарисовать прямоугольник с двумя строками. Я хочу, чтобы первая строка была размером 15pt (ее число), во-вторых, размером 10pt (метка). Легко нарисовать одну строку с одним размером прямоугольника, я делаю это так:
$image = new Imagick('someimage.png'); $draw = new ImagickDraw; $draw->setGravity(Imagick::GRAVITY_CENTER); $draw->setfont(__DIR__ . DS . 'TREBUCBD.TTF'); $draw->setfontsize(15); $draw->annotation(0, 0, '50 points'); $image->drawImage($draw);
Идея здесь состоит в том, чтобы «50» в «50 точках» были большими.
Я попытался сделать $ draw-> push (), чтобы вставить текущие настройки в стек, а затем установить размер шрифта и аннотацию снова, но затем две строки перекрываются. Я пытался это сделать часами. Любая помощь очень ценится!
Вышеупомянутая реализация находится в PHP, но, вероятно, мне удастся это сделать даже на примере, который показывает его с использованием командной строки ImageMagick.
edit: Я начал награду за награду за решение, реализованное на PHP.
Добавьте достаточно места перед «точками» и после «50», чтобы вы хорошо их выровняли:
<?php $image = new Imagick('test.png'); $draw = new ImagickDraw; $draw->setGravity(Imagick::GRAVITY_CENTER); $draw->setfontsize(30); $draw->annotation(0, 0, '50 '); $image->drawImage($draw); $draw = new ImagickDraw; $draw->setGravity(Imagick::GRAVITY_CENTER); $draw->setfontsize(15); $draw->annotation(0, 0, ' points'); $image->drawImage($draw); file_put_contents('test.png', $image->getImageBlob()); ?>
Вы можете использовать опцию + append, чтобы сделать две разные текстовые метки, объединенные горизонтально ( -append
– vertically):
convert -background grey -pointsize 15 -fill black label:abc \ -pointsize 10 -fill red label:cdefgh -gravity South +append test.png
Этот код фактически создает два изображения, размер которых точно соответствует шрифту (поскольку он не указан явно), а затем эти два изображения по горизонтали прилагаются вместе:
Еще раз: размер этого изображения рассчитывается автоматически, чтобы соответствовать вашим меткам. Для достижения этой цели вы можете использовать функции Imagick::labelImage
и Imagick::appendImages
. (Чтобы сделать изображение без фона, вы можете указать -backround transparent
, например, через Imagick::setBackgroundColor
)
После этого результирующее изображение с ярлыками может быть составлено с любым желаемым.