Переклад азбуки Морзе за допомогою Aspose.Font | .NET

Переклад азбуки Морзе за допомогою Aspose.Font для .NET

Що таке переклад азбуки Морзе?

Це функція, яка дозволяє:

GoalHow it works
Encode plain‑text into Morse‑code glyphs of a font (or a bitmap image)IFontMorseEncoder converts characters to a sequence of dot (.) and dash (-) symbols and maps them to glyph identifiers of the supplied 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 Підтримка переліку – Алфавіти Морзе

ЗначенняСкрипт
LatinАнглійська та більшість західних мов
GreekГрецькі літери
CyrillicРосійська, болгарська тощо
HebrewЛітери єврейської мови
ArabicАрабська абетка
PortugueseСпецифічні символи португальської мови
KurdishКурдські літери
PersianЛітери перської/фарсі

Якщо ви опустите перелік, кодер намагатиметься автоматично виявити.

Практичні приклади

Приклади зі шрифтом використовують 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 для .NET23.10 Додано API: TextUtilsFactory, IFontMorseEncoder, IFontMorseDecoder, IMorseEncoder, IMorseDecoder, перерахування MorseAlphabets. Нова функція: «Підтримка кодування азбуки Морзе».

Коли використовувати яке перевантаження

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

Резюме

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

Незалежно від того, чи будуєте ви:

API дає вам повний контроль, зберігаючи код чистим, кросплатформним і повністю підтримуваним.