Traducción de código Morse con Aspose.Font | .NET
Traducción de código Morse con Aspose.Font para.NET
¿Qué es la traducción al código Morse?
Esta es una funcionalidad que le permite:
| Objetivo | Cómo funciona |
|---|---|
| Codificar texto plano en glifos de código Morse de una fuente (o una imagen de mapa de bits) | IFontMorseEncoder convierte caracteres en una secuencia de símbolos de punto (.) y guión (-) y los asigna a los identificadores de glifo del IFont proporcionado. |
| Decodificar una cadena Morse para obtener texto legible | IMorseDecoder devuelve texto sin formato; IFontMorseDecoder devuelve identificadores de glifos o un flujo PNG con una fuente proporcionada. |
| Renderizar texto como código Morse en formato PNG | Las sobrecargas de renderizado aceptan una fuente, su tamaño, el interlineado y el ancho máximo, y devuelven un flujo PNG. |
La característica se introdujo en Aspose.Fontfor.NET23.10 (FONTNET‑602 – Compatibilidad con codificación de código Morse).
¿Por qué usarlo?
- Solución Pure‑C#: sin bibliotecas externas ni dependencias a nivel de sistema operativo.
- Funciona con cualquier fuente que contenga los glifos requeridos (TrueType, OpenType, CFF…).
- La heurística incorporada selecciona automáticamente el alfabeto correcto (latín, griego, cirílico, etc.) cuando lo omites.
- Están disponibles tanto texto → identificadores de glifos (para procesos de renderizado personalizados) como texto → PNG de Morse.
- Totalmente cubierto por el soporte de Aspose (foros, documentos, demostración en vivo).
Empezando
1 Instale el paquete NuGet
1dotnet add package Aspose.Font2 Agregar espacios de nombres (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;Descripción general de la API
1 Fábrica – punto de entrada
Cree una instancia de TextUtilsFactory con new TextUtilsFactory() y llame a sus métodos de instancia:
| Método | Devuelve | Descripción |
|---|---|---|
GetFontMorseEncoder() | IFontMorseEncoder | Codifica texto como identificadores de glifos o un flujo PNG con una fuente proporcionada |
GetMorseEncoder() | IMorseEncoder | Codifica texto como una cadena Morse sin utilizar una fuente |
GetFontMorseDecoder() | IFontMorseDecoder | Decodifica Morse como identificadores de glifos o un flujo PNG con una fuente proporcionada |
GetMorseDecoder() | IMorseDecoder | Decodifica una cadena Morse a texto sin formato sin utilizar una fuente |
La fábrica vive en Aspose.Font.Factories.TextUtilsFactory (agregado en 23.10).
2 interfaces principales
IFontMorseEncoder
Las sobrecargas de glifos devuelven GlyphId[]. Las sobrecargas de renderizado devuelven un Stream PNG que debe liberarse después de copiarlo o consumirlo.
| Resultado | Parámetros |
|---|---|
GlyphId[] | Texto y una instancia de IFont, con detección automática del alfabeto o un valor explícito de MorseAlphabets |
PNG Stream | Texto, una instancia de IFont, fontSize, RenderingUtils.LineSpacingType, lineSpacingValue y maxWidth; otra sobrecarga permite indicar el alfabeto explícitamente |
LineSpacingType admite Pixels y PercentOfFontHeight. El renderizador calcula la altura de la imagen; no hay un parámetro de altura fija.
Los caracteres opcionales inputSeparator y outputSeparator delimitan palabras. Al codificar, sus valores predeterminados son un espacio y /, respectivamente. No sustituyen los símbolos de punto y raya de Morse.
IFontMorseDecodificador
IFontMorseDecoder acepta una cadena Morse, una fuente y un valor explícito de MorseAlphabets. Devuelve GlyphId[] para el texto decodificado o un Stream PNG si se proporcionan parámetros de renderizado. No devuelve texto sin formato.
Utilice IMorseDecoder para obtener un string decodificado sin cargar una fuente. Al decodificar, inputSeparator es / de forma predeterminada y outputSeparator es un espacio.
IMorseEncoder/IMorseDecoder
Estos funcionan solo con cadenas sin formato (sin fuentes involucradas). Úsalos cuando solo necesites secuencias de “puntos y rayas”.
3 Enumera de soporte: MorseAlphabets
| Valor | Escritura |
|---|---|
Latín | Inglés y la mayoría de los idiomas occidentales |
Griego | Letras griegas |
Cirílico | Ruso, búlgaro, etc. |
Hebreo | Letras hebreas |
Árabe | Escritura árabe |
Portugués | Símbolos específicos del portugués |
Kurdo | Letras kurdas |
Persa | Letras persas/farsi |
Si omite la enumeración, el codificador intenta la detección automática.
Ejemplos prácticos
Los ejemplos que utilizan fuentes emplean TTF/LatoWeb-Regular.ttf. Establezca DataDir en el directorio que contiene la carpeta TTF y OutputDir en un directorio de salida existente. La decodificación a texto sin formato no requiere una fuente.
- Codificar en ID de glifos
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())));Resultado: Una matriz de objetos GlyphId que representan los símbolos Morse y pueden utilizarse en procesos de dibujo personalizados.
- Codificar y renderizar un PNG
Este fragmento reutiliza font y encoder del ejemplo anterior. Guarda morse.png en 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}El PNG representa el código Morse con los glifos de punto (.) y raya (-) de la fuente. Los parámetros de caracteres controlan los separadores de palabras, no símbolos alternativos de punto y raya.
- Decodificar de nuevo a texto sin formato
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); // SOSCuando se utilizó un alfabeto personalizado durante la codificación, pase el mismo valor “MorseAlphabets” al decodificador.
- Ejemplo combinado (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}");El ejemplo combinado guarda callme.png en OutputDir, muestra los identificadores de glifos codificados y decodifica ... --- ... como SOS. Utilice los espacios de nombres y la configuración de directorios indicados anteriormente.
Demostración en línea
Aspose proporciona una demostración web gratuita para probar el traductor sin instalar nada:
Características de la demostración:
- Texto ↔︎ Morse ↔︎ Representación de glifos
- Elija caracteres personalizados de punto/guión
- Descargue PNG generado o vea ID de glifos
Notas de la versión
Aspose.Font para .NET 23.10 API añadidas:
TextUtilsFactory,IFontMorseEncoder,IFontMorseDecoder,IMorseEncoder,IMorseDecoder, enumeraciónMorseAlphabets. Nueva función: “Compatibilidad con codificación de código Morse”.
Cuándo usar qué sobrecarga
| Situación | Sobrecarga recomendada |
|---|---|
| Solo se necesitan identificadores de glifo para el procesamiento posterior | Encode(string text, IFont font) (o con alfabeto explícito) |
| Obtener un flujo PNG sin gestionar el código de renderizado | Utilice la sobrecarga con fontSize, lineSpacingType, lineSpacingValue y maxWidth |
| Separadores de palabras personalizados | Establezca inputSeparator y outputSeparator; estos parámetros no cambian los símbolos de punto y raya |
| El idioma de origen usa una escritura no latina y la detección automática falla | Pasar el valor MorseAlphabets apropiado explícitamente |
Resumen
Aspose.Font ahora incluye un motor completo de traducción de código Morse que opera tanto en el nivel de glifo como en el nivel de mapa de bits. Utilizando los métodos simples de fábrica, puede comenzar instantáneamente a codificar, decodificar y renderizar texto en los alfabetos compatibles sin escribir sus propias tablas de mapeo ni lidiar con renderizado de bajo nivel.
Ya sea que esté construyendo:
- Un componente personalizado de visualización de señales
- Una herramienta educativa para enseñar la comunicación Morse.
- Un paso de ofuscación de datos que almacena información como fuentes estilizadas
la API le brinda control total mientras mantiene el código limpio, multiplataforma y totalmente compatible.