Перевод азбуки Морзе с помощью Aspose.Font | .NET
Перевод азбуки Морзе с помощью Aspose.Font for.NET
Что такое перевод азбуки Морзе?
Это функциональность, которая позволяет:
| Цель | Как это работает |
|---|---|
| Кодирование обычного текста в глифы азбуки Морзе шрифта (или растрового изображения) | IFontMorseEncoder преобразует символы в последовательность символов точки (.) и тире (-) и сопоставляет их с идентификаторами глифов предоставленного IFont. |
| Декодирование строки Морзе в читаемый текст | IMorseDecoder возвращает обычный текст; IFontMorseDecoder возвращает идентификаторы глифов или поток PNG, используя заданный шрифт. |
| Рендеринг текста в виде кода Морзе в формате PNG | Перегрузки рендеринга принимают шрифт, его размер, межстрочный интервал и максимальную ширину и возвращают поток PNG. |
Эта функция была представлена в Aspose.Fontfor.NET23.10 (FONTNET‑602 — поддержка кодировки Морзе).
Зачем его использовать?
- Решение на чистом C# — никаких внешних библиотек и никаких зависимостей на уровне ОС.
- Работает с любым шрифтом, содержащим необходимые глифы (TrueType, OpenType, CFF…).
- Встроенная эвристика автоматически выбирает правильный алфавит (латинский, греческий, кириллица и т. д.), если вы его опускаете.
- Доступны преобразования текст → идентификаторы глифов (для собственных конвейеров рендеринга) и текст → PNG с кодом Морзе.
- Полностью обеспечен поддержкой Aspose (форумы, документация, живая демо-версия).
Начало работы
1 Установите пакет NuGet
1dotnet add package Aspose.Font2. Добавьте пространства имен (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// 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, представляющих символы Морзе и пригодных для собственных конвейеров рисования.
- Кодирование и рендеринг 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// 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.
- Объединённый пример (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 предоставляет бесплатную веб-демо, позволяющую опробовать переводчик, ничего не устанавливая:
Особенности демо-версии:
- Текст ↔︎ Морзе ↔︎ Рендеринг глифов
- Выберите собственные символы точки/тире
- Загрузите созданный PNG или просмотрите идентификаторы глифов
Примечания к выпуску
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 дает вам полный контроль, сохраняя при этом чистоту кода, кроссплатформенность и полную поддержку.