SIRTX-Font
view release on metacpan or search on metacpan
}
},
"develop" : {
"requires" : {
"Test::Pod" : "1.41"
}
},
"runtime" : {
"recommends" : {
"File::Spec" : "3.84",
"Image::Magick" : "0"
},
"requires" : {
"Carp" : "1.35",
"Data::Identifier" : "v0.29.0",
"Encode" : "3.19",
"SIRTX::Datecode" : "v0.7.0",
"perl" : "v5.20.0"
}
},
"test" : {
- t
provides:
SIRTX::Font:
file: lib/SIRTX/Font.pm
version: v0.8.0
SIRTX::Font::Renderer:
file: lib/SIRTX/Font/Renderer.pm
version: v0.8.0
recommends:
File::Spec: '3.84'
Image::Magick: '0'
requires:
Carp: '1.35'
Data::Identifier: v0.29.0
Encode: '3.19'
SIRTX::Datecode: v0.7.0
perl: v5.20.0
resources:
repository: ssh://gitea@gitea.dev.loewenfelsen.net/11201-Loewenfelsen/SIRTX-Font.git
version: v0.08
x_generated_by_perl: v5.36.0
# This file is generated by Dist::Zilla::Plugin::CPANFile v6.030
# Do not edit this file directly. To change prereqs, edit the `dist.ini` file.
requires "Carp" => "1.35";
requires "Data::Identifier" => "v0.29.0";
requires "Encode" => "3.19";
requires "SIRTX::Datecode" => "v0.7.0";
requires "perl" => "v5.20.0";
recommends "File::Spec" => "3.84";
recommends "Image::Magick" => "0";
on 'test' => sub {
requires "Test::Exception" => "0.30";
requires "Test::More" => "1.3";
requires "Test::Warn" => "0.30";
};
on 'configure' => sub {
requires "ExtUtils::MakeMaker" => "0";
};
copyright_year = 2025-2026
[Prereqs]
perl = v5.20
Carp = 1.35
Encode = 3.19
Data::Identifier = v0.29
SIRTX::Datecode = v0.07
[Prereqs / RuntimeRecommends]
Image::Magick = 0
File::Spec = 3.84
;[Prereqs / RuntimeSuggests]
[Prereqs / TestRequires]
Test::More = 1.3
Test::Exception = 0.30
Test::Warn = 0.30
[MetaNoIndex]
lib/SIRTX/Font.pm view on Meta::CPAN
foreach my $glyph (sort {$index_update{$a} <=> $index_update{$b}} keys %index_update) {
print $out $glyphs->[$glyph];
}
}
sub import_glyph {
my ($self, $in) = @_;
if (!eval {$in->isa('Image::Magick')}) {
require Image::Magick;
my $p = Image::Magick->new;
$p->Read($in);
$in = $p;
}
return $self->_import_glyph_wbmp($in->ImageToBlob(magick => 'wbmp'));
}
sub _import_glyph_wbmp {
my ($self, $data) = @_;
my ($w, $h);
lib/SIRTX/Font.pm view on Meta::CPAN
}
push(@{$self->{glyphs}}, ~. $pixel);
$chars->{$cp} = $cur++;
}
}
sub _import_ttf {
require Font::FreeType;
Font::FreeType->import(qw(FT_RENDER_MODE_MONO));
require Image::Magick;
my ($self, $in, %opts) = @_;
my $face = Font::FreeType->new->face($in);
my $height = $self->height;
my $width = $self->width;
my $baseline = $self->{baseline};
my %flat_namedinfos;
croak 'Stray options passed' if scalar keys %opts;
lib/SIRTX/Font.pm view on Meta::CPAN
$version_minor = 255 if $version_minor > 255;
$self->_set_value(version_minor => $version_minor);
}
#warn sprintf('version: %s.%s', $version_major // '<undef>', $version_minor // '<undef>');
}
$face->foreach_char(sub {
my $glyph = $_;
my $code_point = $glyph->char_code;
my ($bitmap, $left, $top) = $glyph->bitmap_magick(__PACKAGE__->FT_RENDER_MODE_MONO);
my $p; # = Image::Magick->new;
my $dy = $baseline - $top;
my $error = 0;
my $ok;
$dy = 0 if $dy < 0;
while ($error < 1) {
$p = Image::Magick->new;
$p->Set(size => sprintf('%ux%u', $width, $height));
$p->Read('canvas:black');
unless ($p->CopyPixels(image => $bitmap, x => 0, y => 0, dx => ($left > 0 ? $left : 0), dy => $dy)) {
$ok = 1;
last;
}
$error++;
#warn sprintf('error: %u, codepoint: U+%04X', $error, $code_point);
$left = 0;
$dy = 0;
lib/SIRTX/Font.pm view on Meta::CPAN
$glyph = int($glyph) if defined $glyph;
croak 'No valid glyph given' unless defined($glyph) && $glyph >= 0;
$glyph = $self->{glyphs}[$glyph];
croak 'No valid glyph given' unless defined($glyph);
if ($self->width >= 128 || $self->height >= 128 || $self->bits != 1) {
croak 'Unsupported glyph size';
}
require Image::Magick;
$p = Image::Magick->new(magick => 'wbmp');
$p->BlobToImage(pack('CCCC', 0, 0, $self->width, $self->height).$glyph);
return $p;
}
sub export_alias_map {
my ($self, $filename, %opts) = @_;
my $chars = $self->{chars};
my %glyph_map;
lib/SIRTX/Font.pm view on Meta::CPAN
Writes the current font in the SIRTX format to the given handle.
=head2 import_glyph
my $glyph = $font->import_glyph($filename);
Imports a glyph from a file.
The glyph index is returned.
The supported formats depend on the installed modules.
See also L<Image::Magick>.
=head2 import_alias_map
$font->import_alias_map($filename);
(experimental since v0.04)
Imports an alias map from the given file.
The format is one alias group per line.
lib/SIRTX/Font.pm view on Meta::CPAN
B<Note:>
All rules of L</import_glyph> apply.
Entries are merged, data already present in the font is not cleared.
B<Note:>
In order to deduplicate entries a call to L</gc> might be considered.
=head2 export_glyph_as_image_magick
my Image::Magick $image = $font->export_glyph_as_image_magick($glyph);
(experimental since v0.01)
Exports a single glyph as a image object.
=head2 export_alias_map
$font->export_alias_map($filename);
(experimental since v0.04)
lib/SIRTX/Font.pm view on Meta::CPAN
=head2 renderer
my SIRTX::Font::Renderer $renderer = $font->renderer;
(since v0.08)
Returns a new renderer object which can be used to render text using this font.
=head2 render
my Image::Magick $image = $font->render($string);
# e.g.:
my Image::Magick $image = $font->render("Hello World!");
$image->Transparent(color => 'white'); # transparent background
$image->Write('hello.png');
(experimental since v0.03, deprecated since v0.08, will be removed in v0.10, may warn)
B<Note:>
This method is now deprecated.
Please use L<SIRTX::Font::Renderer>.
See also L</renderer>.
lib/SIRTX/Font/Renderer.pm view on Meta::CPAN
# ABSTRACT: module for working with SIRTX font files
package SIRTX::Font::Renderer;
use v5.20;
use strict;
use warnings;
use Carp;
use List::Util ();
use Image::Magick ();
use SIRTX::Font;
our $VERSION = v0.08;
sub new {
my ($pkg, %opts) = @_;
my $self = bless {}, $pkg;
lib/SIRTX/Font/Renderer.pm view on Meta::CPAN
if (scalar(@_) > 1) {
$self->{proportional} = $n;
}
return $self->{proportional};
}
#@returns Image::Magick
sub render {
my ($self, $string, @opts) = @_;
my @lines = split(/\r?\n/, $string);
my $max_line = List::Util::max(map {length} @lines);
my $font = $self->font;
my $width = $font->width;
my $height = $font->height;
my $proportional = $self->proportional;
my $p = Image::Magick->new;
my %handle_cache;
croak 'Stray options passed' if scalar @opts;
$p->Set(size => sprintf('%ux%u', $self->size_of_text($string)));
$p->Read('canvas:white');
for (my $row = 0; $row < scalar(@lines); $row++) {
my $line = $lines[$row];
my $len = length($line);
lib/SIRTX/Font/Renderer.pm view on Meta::CPAN
my $bool = $renderer->proportional;
# or:
$renderer->proportional($bool)
(since v0.08)
Gets or sets the state of the proportional rendering flag.
=head2 render
my Image::Magick $image = $renderer->render($string);
# e.g.:
my Image::Magick $image = $renderer->render("Hello World!");
$image->Transparent(color => 'white'); # transparent background
$image->Write('hello.png');
(experimental since v0.08)
Renders a text using the loaded font.
=head2 size_of_text
my ($width, $height) = $renderer->size_of_text($string);
( run in 1.425 second using v1.01-cache-2.11-cpan-600a1bdf6e4 )