Указание шрифта с помощью семейства шрифтов с помощью ImageMagick

Можно ли визуализировать шрифт, используя семейство шрифтов в ImageMagick?

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

В конечном итоге я использую PHP, но я также безуспешно пытался использовать ImageMagick в командной строке. Я использую ImageMagick 6.7.6 в Linux. Вот что я сделал до сих пор.

  • Я протестировал шрифты, распознаваемые ImageMagick, с помощью определить -list fontкоманда
  • Я вручную создал тип.xml на основе файлов xml, которые был установлен в моей системе
  • Я создал файл type.xml, используя этот скрипт: imagick_type_gen
  • Я протестировал несколько типов шрифтов: ttf, otf, pfb, ttc

Вот пример вывода identity -list fontдля некоторых шрифтов, с которыми я тестировал:

Font: DejaVu-Sans-Book
  family: DejaVu Sans
  style: Normal
  stretch: Normal
  weight: 400
  glyphs: /usr/share/fonts/dejavu/DejaVuSans.ttf

Font: Baskerville-Regular
  family: Baskerville
  style: Normal
  stretch: Normal
  weight: 400
  glyphs: /usr/share/fonts/custom/Baskerville.ttc

Font: Palatino-Roman
  family: Palatino
  style: Normal
  stretch: Normal
  weight: 400
  glyphs: /usr/share/fonts/urw-fonts/p052003l.pfb

Font: Honey-Script-Light
  family: Honey Script
  style: Normal
  stretch: Normal
  weight: 300
  glyphs: /usr/share/fonts/custom/HoneyScript-Light.ttf


Если я укажу полное имя шрифта, все будет работать так, как ожидалось:

convert -pointsize 32 -font "Honey-Script-Light" label:'Testing' testing.png

Working


Однако, когда я пытаюсь использовать семейство шрифтов (оба перечислены в identity -list fontи перечислены в type.xml), я получаю системный шрифт по умолчанию:

convert -pointsize 32 -family "Honey Script" label:'Testing' testing.png

Not Working


Я также пытался указать все параметры шрифта, и это снова не работает:

convert -pointsize 32 -stretch Normal -style Normal -weight 300 -family "Honey Script"   label:'Testing' testing.png



Когда я выполняю аналогичный процесс через PHP, он фактически возвращает ошибку, как только я пытаюсь установить семейство шрифтов объекта рисования.

$draw->setFontFamily('Honey Script');

Выдается следующая ошибка:

PHP Fatal error:  Uncaught exception 'ImagickDrawException' with message 'Unable to set font family; parameter not found in the list of configured fonts



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

$draw->setFont('Honey-Script-Light');



Из всего, что я нашел о том, как настроить шрифт для использования с ImageMagick, шрифты действительно настроены. Почему я не могу выбрать шрифты на основе семейства шрифтов?

Возможно, это недокументированная ошибка? Есть ли что-то, что мне не хватает?

Я понимаю, что мог бы просто указать полное имя шрифта и покончить с этим, но есть причина, специфичная для моего проекта, по которой гораздо лучше указать семейство шрифтов.

Зачем указывать семейство шрифтов, если это не работает? Вот что ImageMagick говорит о параметре семейства шрифтов:

Этот параметр предлагает семейство шрифтов, которое ImageMagick должен попытаться использовать. для рендеринга текста.Если семья может быть найдена, она используется; если нет, а шрифт по умолчанию (например, «Arial») или известное семейство похожих шрифтов. заменены (например, «Курьер» может использоваться, если запрашивается «Система» но не нашел).

Приветствуются любые идеи. Я в значительной степени застрял на этом этапе.


РЕДАКТИРОВАТЬ:
Основная причина, по которой я предпочел бы использовать семейства шрифтов, а не шрифты с полным названием, заключается в том, что я обрабатываю входные данные. Я получаю файлы от третьих лиц, которые необходимо обработать. Эти файлы определяют шрифты следующим образом:

font-family="Honey Script" font-style="Normal" font-stretch="Normal" font-weight="300"

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

Мне кажется, что должен быть способ заставить ImageMagick получить точный шрифт на основе всех доступных сведений о шрифте, перечисленных выше.

Если это невозможно, то зачем ImageMagick вообще указывать семейство шрифтов?

8
задан Community 8 February 2017 в 14:35
поделиться