Можно ли визуализировать шрифт, используя семейство шрифтов в ImageMagick?
Я перепробовал все, что мог, и, кажется, ничего не работает. Я много искал, и я не могу найти ничего, что касалось бы этой конкретной проблемы.
В конечном итоге я использую PHP, но я также безуспешно пытался использовать ImageMagick в командной строке. Я использую ImageMagick 6.7.6 в Linux. Вот что я сделал до сих пор.
определить -list font
командаВот пример вывода 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
Однако, когда я пытаюсь использовать семейство шрифтов (оба перечислены в identity -list font
и перечислены в type.xml), я получаю системный шрифт по умолчанию:
convert -pointsize 32 -family "Honey Script" label:'Testing' testing.png
Я также пытался указать все параметры шрифта, и это снова не работает:
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 вообще указывать семейство шрифтов?