LINUX.ORG.RU

[perl/bash] Определить размер надписи с данным шрифтом


0

0

Здравствуйте!

Дано:
- имя и размер шрифта (шрифт не обязательно моноширный)
- строка текста

Надо в скрипте на баше/перле определить размер прямоугольника, в который можно будет вписать этот текст.

В какую сторону копать? В WinApi я это когда-то делал путём выбора шрифта в временный графический контекст и вызовом GetTextExtent(..) для данного контекста и строки. Думаю, что в случае перла будет нечто подобное; хотелось бы минимальный в плане зависимостей алгоритм. Направьте на путь истинный! Gd?

★★★★★
#!/usr/bin/perl

use strict;
use Imager;

my $font = Imager::Font->new(file => 'arial.ttf', size => 10) or die;
my $bbox = $font->bounding_box(string => 'Hello, World!');

local ($,, $\) = (' = ', "\n");
print start_offset => $bbox->start_offset;
print left_bearing => $bbox->left_bearing;
print right_bearing => $bbox->right_bearing;
print end_offset => $bbox->end_offset;
print global_descent => $bbox->global_descent;
print global_ascent => $bbox->global_ascent;
print ascent => $bbox->ascent;
print decent => $bbox->descent;
print total_width => $bbox->total_width;
print font_height => $bbox->font_height;
print text_height => $bbox->text_height;
print display_width => $bbox->display_width;
arsi ★★★★★
()

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

Волнует дальнейшая судьба этих размеров. Зачем они нужны?

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

baverman ★★★
()
Ответ на: комментарий от baverman

>Волнует дальнейшая судьба этих размеров. Зачем они нужны?

Корректировать размеры виджетов в FVWM :]

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

Выводить будет xft

yoghurt ★★★★★
() автор топика
Ответ на: комментарий от arsi

Вот это клёво, спасибо!

А Imager::Font умеет открывать шрифты по иксовому/xft имени? Беглый осмотр документации сказал мне только о конкретных файлах (либо именах в винде)..

yoghurt ★★★★★
() автор топика
Ответ на: комментарий от yoghurt

нет, не умеет…

можно искать примерно так:

fc-match -v 'Tahoma' | grep -oP '(?<=file: ")[^"]+'
т.е.:
my $font_path = `fc-match -v '$font_name' | grep -oP '(?<=file: ")[^"]+'`;

arsi ★★★★★
()
Ответ на: комментарий от yoghurt

В перле не силен. Но вот как можно узнать размеры у панго, который выводит текст через xft на питоне.

import gtk
import pango

label = gtk.Label('test text')
name_font = pango.FontDescription("Monospace 10")
label.modify_font(name_font)
print label.get_layout().get_pixel_size()
baverman ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.