Как получить ширину / высоту текста - PullRequest
6 голосов
/ 11 декабря 2011

Как получить ширину / высоту написанного текста в Imagemagick?

convert -font 'tahoma.ttf' -draw "text 10,10 'the text'" img.png

Ответы [ 3 ]

1 голос
/ 22 ноября 2017

Это действительно поздно, но с PHP.net :

Использование:

Imagick :: queryFontMetrics - возвращает массив, представляющий метрики шрифта

как это:

   // Set font.
      $font = PATH/TO/YOUR/CUSTOM/FONT
   // Get dimensions.
   // Create a new Imagick object.
      $imTest = new Imagick();

   // Create an ImagickDraw object.
      $drawTest = new ImagickDraw();

   // Set the font.
      $drawTest->setFont($font);

   // Set the local X and Y.
      $localX = 0;
      $localY = 0;

   // Dump the font metrics, autodetect multiline 
      for ($i = 0; $i < strlen($yourText); $i++) {
         if ($yourText[$i] === ' ') {
            $tempX += $imTest->queryFontMetrics($drawTest, $yourText[$i])['textWidth'];
         } else {
            $tempX += $imTest->queryFontMetrics($drawTest, $yourText[$i])['originX'] + $imTest->queryFontMetrics($drawTest, $yourText[$i])['boundingBox']['x2'] + $imTest->queryFontMetrics($drawTest, $yourText[$i])['boundingBox']['x1'];
         }    
      }

Где:

символШирина и символВысота - Похоже, они связаны с размером, который вы указали для шрифта, и, похоже, не отличаются от шрифта к шрифту (при одинаковом размере). Как такие они не особо полезны (для меня, по крайней мере). Они не надежный индикатор того, сколько места будет использовать шрифт.

восходящему - Ascender - это часть шрифта, которая находится над базовой линией. Это не связано с символом - значение по возрастанию одинаково для всех символ в шрифте.

спусковое - Descender - это часть шрифта, которая находится ниже базовой линии. Это представляется как отрицательная фигура. Добавление абсолютных значений восходящий и нисходящий дает вам ...

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

TextWidth - Это значение варьируется от символа к символу и является шириной символа. Это полезно, если boundingBox не обеспечивает используемые значения (см. boundingBox ниже). При позиционировании символов один по одному - не используйте textWidth, используйте originX (см. ниже).

maxHorizontalAdvance - Боюсь, я не совсем понял цель этого. Это одинаково для каждого символа в шрифте. Для шрифта Arial Italic в размер 67, значение 89, что намного шире, чем сообщалось заранее для M или W в том же размере.

BoundingBox - Это возвращает ассоциативный массив, описывающий четыре точки (x1, y1, x2, y2) прямоугольника, которые содержат символ. Эти значения по отношению к началу координат (то есть координат, где вы находитесь рисование персонажа внутри изображения). Возвращенный прямоугольник очень точный и полностью охватывает все части печатного символа - но boundingBox работает только для отдельных символов. Не даст точные цифры для нескольких персонажей (по моему опыту в любом случае). При рисовании прямоугольника необходимо добавить значения «x» в начало координат и СУБТРАКТ "y" значения из источника. Вы не можете полагаться на boundingBox для персонажа SPACE. Возвращает ограничивающий ящик (0,0,0,0). textWidth (см. выше) пригодится здесь.

originX и originY - они неточно названы. Значения, возвращаемые в originX и originY, на самом деле являются advanceX и advanceY. Эти значения дают вам позиция следующего символа относительно текущего.

А потом вы можете сгенерировать изображение со своим текстом следующим образом:

// Generate image.
   $cmd = 'convert -size ' . $localX . 'x' . $maxY . ' xc:none -gravity Center -font ' . $font . ' -pointsize ' . $fontSize . ' -annotate +0+0 "' . $yourText . '" ' . FINAL/PATH/TO/YOUR/FILE.png';
   $r = shell_exec($cmd);
0 голосов
/ 08 марта 2016

мы можем использовать функцию queryFontMetrics imagick. см. эту ссылку (http://php.net/manual/en/imagick.queryfontmetrics.php)

Извлеките ответ этой функции, вы получите ширину и высоту.

0 голосов
/ 31 октября 2012

Посмотрите на эту страницу: http://www.imagemagick.org/ImageMagick-7.0.0/script/conjure.php (3-й пример)

Двоичный файл заклинание позволяет запускать сценарии на основе XML, написанные на языке сценариев Magick (MSL). Они могут использовать команду IM «query-font-metrics», которая, по-видимому, недоступна другим двоичным файлам.

...