SIRTX-Font

 view release on metacpan or  search on metacpan

META.json  view on Meta::CPAN

         }
      },
      "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" : {

META.yml  view on Meta::CPAN

    - 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

cpanfile  view on Meta::CPAN

# 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";
};

dist.ini  view on Meta::CPAN

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 )