#lua #vips
#lua #важные персоны
Вопрос:
Я использую библиотеку vips для работы с некоторыми изображениями, в частности с ее привязкой к Lua, lua-vips, и я пытаюсь создать изображения с выровненным текстом. Я предполагаю, что в vips нет доступной функции для выполнения этого напрямую, поэтому мне было интересно, как придумать алгоритм для этого.
Моей первой идеей было проанализировать текст для выравнивания, используя известный алгоритм выравнивания, но используя ширину изображения каждого отдельного слова вместо количества символов для измерения пустого пространства. Затем для каждой из строк разместите текстовые изображения каждого слова рядом друг с другом, добавив необходимое пространство в виде черных пикселей между ними.
Однако я не смог понять, как проверить высоту строки, поскольку она не обязательно равна высоте текстового изображения, поэтому я не уверен, что использую хороший подход.
Комментарии:
1. Да, libvips не отображает положение базовой линии, поэтому я думаю, что вы не можете этого сделать. Похоже, что в pango (который libvips использует для создания макета) теперь есть опция выравнивания. Было бы лучше добавить поддержку для этого. Я обнаружил проблему: github.com/libvips/libvips/issues/1258
Ответ №1:
git master libvips теперь поддерживает выравнивание, и эта функция должна появиться в грядущей версии libvips 8.8 (выйдет весной 2019 года).
Используйте его следующим образом:
$ vips text x.png "hello world sdkj hsdfkj herqkjh wehf" --width 100 --justify
Чтобы сделать:
Или из Lua:
x = vips.Image.text("hello world sdkj hsdfkj herqkjh wehf", {width = 100, justify = true})
Комментарии:
1. Итак, чтобы использовать эту опцию, мне нужно только снова создать vips из репозитория?
2. Да, создайте libvips master из git или дождитесь выхода версии 8.8.