是否有一个 Perl 库可以将字体绘制为多边形? [关闭]
Posted
技术标签:
【中文标题】是否有一个 Perl 库可以将字体绘制为多边形? [关闭]【英文标题】:Is there a Perl library to draw fonts as polygons? [closed] 【发布时间】:2021-12-08 18:14:12 【问题描述】:我想将文本绘制为多边形并获得一个包含 (x1,y1)-(x2,y2) 对的线段数组,我可以在矢量绘图应用程序中进行缩放和使用。一种应用可能是用 CNC 编写文本。
所以,例如:
$f = PolyFont->new("Hello World");
@lines = $f->get_lines();
这可能会提供@lines = ([x1,y1],[x2,y2]) 值或类似值的列表。
字体不一定要特别漂亮,用线段逼近就不用支持曲线了。
如果它可以接收 TTF 那就更好了!
想法?
【问题讨论】:
相关,但在 perl 中寻找这个:***.com/questions/13797787/… SVG 有帮助吗?有多种图像模块可以生成 SVG 图像。我不知道你的确切用例,但你可以在 SVG 之上构建并解析它的输出,这应该是相当微不足道的 XML 消耗,以转换为一组指令。听起来像一个有趣的问题要解决,你可以在之后将它发布到 cpan。在 cpan 上也有一些 CNC 的结果,但它们似乎都不是与文本相关的。 也许FreeType library 可以做到这一点?见Draw text outline with Freetype。还有各种与 FreeType 库交互的 Perl 模块 【参考方案1】:您可以使用Font::FreeType
模块将字形的轮廓作为一系列线段和贝塞尔弧来获取。这是一个示例,我使用Image::Magick
将大纲保存到一个新的.png
文件中:
use feature qw(say);
use strict;
use warnings;
use Font::FreeType;
use Image::Magick;
my $size = 72;
my $dpi = 600;
my $font_filename = 'Vera.ttf';
my $char = 'A';
my $output_filename = $char . '-outline.png';
my $face = Font::FreeType->new->face($font_filename);
$face->set_char_size($size, $size, $dpi, $dpi);
my $glyph = $face->glyph_from_char($char);
my $width = $glyph->horizontal_advance;
my $height = $glyph->vertical_advance;
my $img = Image::Magick->new(size => "$widthx$height");
$img->Read('xc:#ffffff');
$img->Set(stroke => '#8888ff');
my $curr_pos;
$glyph->outline_decompose(
move_to => sub
my ($x, $y) = @_;
$y = $height - $y;
$curr_pos = "$x,$y";
,
line_to => sub
my ($x, $y) = @_;
$y = $height - $y;
$img->Draw(primitive => 'line', linewidth => 5, points => "$curr_pos $x,$y");
$curr_pos = "$x,$y";
,
cubic_to => sub
my ($x, $y, $cx1, $cy1, $cx2, $cy2) = @_;
$y = $height - $y;
$cy1 = $height - $cy1;
$cy2 = $height - $cy2;
$img->Draw(primitive => 'bezier',
points => "$curr_pos $cx1,$cy1 $cx2,$cy2 $x,$y");
$curr_pos = "$x,$y";
,
);
$img->Write($output_filename);
输出:
注意事项:
您可以从这里下载Vera.ttf
字体文件:https://www.dafont.com/bitstream_vera_sans.font
此示例基于来自Font::FreeType
CPAN 发行版的示例脚本magick.pl。
【讨论】:
以上是关于是否有一个 Perl 库可以将字体绘制为多边形? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章