Перевод азбуки Морзе с помощью Aspose.Font | .NET

Перевод азбуки Морзе с помощью Aspose.Font for.NET

Что такое перевод азбуки Морзе?

Это функциональность, которая позволяет:

ЦельКак это работает
Кодирование обычного текста в глифы азбуки Морзе шрифта (или растрового изображения)IFontMorseEncoder преобразует символы в последовательность символов точки (.) и тире (-) и сопоставляет их с идентификаторами глифов предоставленного IFont.
Декодирование строки Морзе в читаемый текстIMorseDecoder возвращает обычный текст; IFontMorseDecoder возвращает идентификаторы глифов или поток PNG, используя заданный шрифт.
Рендеринг текста в виде кода Морзе в формате PNGПерегрузки рендеринга принимают шрифт, его размер, межстрочный интервал и максимальную ширину и возвращают поток PNG.

Эта функция была представлена в Aspose.Fontfor.NET23.10 (FONTNET‑602 — поддержка кодировки Морзе).

Зачем его использовать?

Начало работы

1 Установите пакет NuGet

1dotnet add package Aspose.Font

2. Добавьте пространства имен (C#)

1using System;
2using System.IO;
3using System.Linq;
4using Aspose.Font;
5using Aspose.Font.Factories;
6using Aspose.Font.Glyphs;
7using Aspose.Font.Renderers;
8using Aspose.Font.Sources;
9using Aspose.Font.TextUtils;

Обзор API

1 Фабрика – точка входа

Создайте экземпляр TextUtilsFactory с помощью new TextUtilsFactory(), затем вызывайте его методы:

МетодВозвращаетОписание
GetFontMorseEncoder()IFontMorseEncoderКодирует текст в идентификаторы глифов или поток PNG, используя заданный шрифт
GetMorseEncoder()IMorseEncoderКодирует текст в строку Морзе без шрифта
GetFontMorseDecoder()IFontMorseDecoderДекодирует код Морзе в идентификаторы глифов или поток PNG, используя заданный шрифт
GetMorseDecoder()IMorseDecoderДекодирует строку Морзе в обычный текст без шрифта

Фабрика находится в Aspose.Font.Factories.TextUtilsFactory (добавлен в версии 23.10).

2 основных интерфейса

IFontMorseEncoder

Перегрузки для глифов возвращают GlyphId[]. Перегрузки рендеринга возвращают поток PNG типа Stream, который вызывающий код должен освободить после копирования или обработки.

РезультатПараметры
GlyphId[]Текст и IFont с автоматическим определением алфавита или явным значением MorseAlphabets
PNG StreamТекст, IFont, fontSize, RenderingUtils.LineSpacingType, lineSpacingValue и maxWidth; отдельная перегрузка позволяет явно задать алфавит

LineSpacingType поддерживает Pixels и PercentOfFontHeight. Рендерер рассчитывает высоту изображения; параметра фиксированной высоты нет.

Необязательные символы inputSeparator и outputSeparator разделяют слова. При кодировании их значения по умолчанию — пробел и / соответственно. Они не заменяют точки и тире в коде Морзе.

IFontMorseDecoder

IFontMorseDecoder принимает строку Морзе, шрифт и явное значение MorseAlphabets. Он возвращает GlyphId[] для декодированного текста либо поток PNG типа Stream, если заданы параметры рендеринга. Обычный текст он не возвращает.

Используйте IMorseDecoder, чтобы получить декодированную строку string без загрузки шрифта. При декодировании inputSeparator по умолчанию равен /, а outputSeparator — пробелу.

IMorseEncoder/IMorseDecoder

Они работают только с необработанными строками (без использования шрифта). Используйте их, когда вам нужны только последовательности «точка-тире».

3. Поддержка перечисления — «MorseAlphabets».

ЗначениеСкрипт
ЛатинскийАнглийский и большинство западных языков
ГреческийГреческие буквы
КириллицаРусский, болгарский и др.
ИвритБуквы иврита
АрабскийАрабская письменность
ПортугальскийСимволы, специфичные для португальского языка
КурдскийКурдские буквы
ПерсидскийПерсидские/фарси буквы

Если вы опустите перечисление, кодировщик попытается выполнить автоматическое обнаружение.

Практические примеры

Примеры со шрифтом используют TTF/LatoWeb-Regular.ttf. Укажите в DataDir каталог с папкой TTF, а в OutputDir — существующий выходной каталог. Для декодирования в обычный текст шрифт не требуется.

  1.  Кодировать в идентификаторы глифов
 1// Encode text as Morse-code glyph identifiers
 2
 3// Load a font containing the Morse-code symbols.
 4string fontPath = Path.Combine(DataDir, "TTF", "LatoWeb-Regular.ttf");
 5Font font = Font.Open(new FontDefinition(
 6    FontType.TTF, "ttf", new FileSystemStreamSource(fontPath)));
 7
 8// Create the factory and get the font encoder.
 9var factory = new TextUtilsFactory();
10IFontMorseEncoder encoder = factory.GetFontMorseEncoder();
11
12// Encode HELLO WORLD using automatic alphabet detection.
13GlyphId[] glyphIds = encoder.Encode("HELLO WORLD", font);
14Console.WriteLine(string.Join(", ", glyphIds.Select(id => id.ToString())));

Результат: массив объектов GlyphId, представляющих символы Морзе и пригодных для собственных конвейеров рисования.

  1.  Кодирование и рендеринг PNG

Этот фрагмент использует font и encoder из предыдущего примера. Он сохраняет morse.png в OutputDir.

 1// Encode text as Morse code and save a PNG
 2
 3double fontSize = 48;
 4var spacing = RenderingUtils.LineSpacingType.Pixels;
 5int lineSpacing = 10;
 6int maxWidth = 800;
 7
 8// The renderer returns a stream and determines the image height.
 9using (Stream pngStream = encoder.Encode(
10    "SOS HELP", font, fontSize, spacing, lineSpacing, maxWidth))
11{
12    if (pngStream.CanSeek)
13        pngStream.Position = 0;
14
15    using (FileStream output = File.Create(Path.Combine(OutputDir, "morse.png")))
16    {
17        pngStream.CopyTo(output);
18    }
19}

PNG отображает код Морзе с помощью глифов точки (.) и тире (-) из шрифта. Символьные параметры управляют разделителями слов, а не альтернативными символами точки и тире.

  1.  Декодировать обратно в обычный текст
1// Decode a Morse-code string to plain text
2
3// Plain-text decoding does not require a font.
4IMorseDecoder decoder = new TextUtilsFactory().GetMorseDecoder();
5string morse = "... --- ...";
6string result = decoder.Decode(morse, MorseAlphabets.Latin);
7Console.WriteLine(result); // SOS

Если во время кодирования использовался собственный алфавит, передайте в декодер то же значение MorseAlphabets.

  1. Объединённый пример (C#)
 1// Render Morse code, obtain glyph identifiers and decode a message
 2
 3// Load a font.
 4string fontPath = Path.Combine(DataDir, "TTF", "LatoWeb-Regular.ttf");
 5Font font = Font.Open(new FontDefinition(
 6    FontType.TTF, "ttf", new FileSystemStreamSource(fontPath)));
 7
 8var factory = new TextUtilsFactory();
 9IFontMorseEncoder encoder = factory.GetFontMorseEncoder();
10IMorseDecoder decoder = factory.GetMorseDecoder();
11const string message = "CALL ME AT 5PM";
12
13// Encode to PNG. Height is calculated by the renderer.
14using (Stream pngStream = encoder.Encode(
15    message, font,
16    fontSize: 36,
17    lineSpacingType: RenderingUtils.LineSpacingType.Pixels,
18    lineSpacingValue: 10,
19    maxWidth: 900))
20{
21    if (pngStream.CanSeek)
22        pngStream.Position = 0;
23
24    using (FileStream output = File.Create(Path.Combine(OutputDir, "callme.png")))
25    {
26        pngStream.CopyTo(output);
27    }
28}
29Console.WriteLine("PNG created.");
30
31// Encode to glyph identifiers.
32GlyphId[] ids = encoder.Encode(message, font);
33Console.WriteLine("Glyph IDs: " + string.Join(", ", ids.Select(id => id.ToString())));
34
35// Decode a plain Morse string.
36string morse = "... --- ...";
37string decoded = decoder.Decode(morse, MorseAlphabets.Latin);
38Console.WriteLine($"Decoded '{morse}' -> {decoded}");

Объединённый пример сохраняет callme.png в OutputDir, выводит идентификаторы закодированных глифов и декодирует ... --- ... в SOS. Используйте пространства имён и настройки каталогов, указанные выше.

Онлайн демо

Aspose предоставляет бесплатную веб-демо, позволяющую опробовать переводчик, ничего не устанавливая:

Особенности демо-версии:

Примечания к выпуску

Aspose.Font для .NET 23.10 Добавлены API: TextUtilsFactory, IFontMorseEncoder, IFontMorseDecoder, IMorseEncoder, IMorseDecoder, перечисление MorseAlphabets. Новая функция: «Поддержка кодирования азбукой Морзе».

Когда использовать какую перегрузку

СитуацияРекомендуемая перегрузка
Для дальнейшей обработки нужны только идентификаторы глифовEncode(string text, IFont font) (или с явным указанием алфавита)
Получить поток PNG без собственного кода рендерингаИспользуйте перегрузку с fontSize, lineSpacingType, lineSpacingValue и maxWidth
Собственные разделители словЗадайте inputSeparator и outputSeparator; эти параметры не меняют символы точки и тире
В исходном языке используется нелатинский алфавит, и автоматическое определение завершается неудачейПередайте соответствующее значение MorseAlphabets явно

Резюме

Aspose.Font теперь включает в себя полный механизм перевода азбуки Морзе, который работает как на уровне, так и на растровом изображении. Используя простые фабричные методы, вы можете мгновенно начать кодирование, декодирование и рендеринг текста в поддерживаемых алфавитах, не создавая собственных таблиц сопоставления и не занимаясь низкоуровневым рендерингом.

Независимо от того, строите ли вы:

API дает вам полный контроль, сохраняя при этом чистоту кода, кроссплатформенность и полную поддержку.