Traduzione in codice Morse con Aspose.Font | .NET
Traduzione in codice Morse con Aspose.Font per.NET
Cos’è la traduzione in codice Morse?
Questa è una funzionalità che ti consente di:
| Obiettivo | Come funziona |
|---|---|
| Codifica il testo normale in glifi in codice Morse di un font (o di un’immagine bitmap) | IFontMorseEncoder converte i caratteri in una sequenza di simboli punto (.) e trattino (-) e li mappa agli identificatori di glifo dell’IFont fornito. |
| Decodificare una stringa Morse in testo leggibile | IMorseDecoder restituisce testo normale; IFontMorseDecoder restituisce identificatori di glifi o un flusso PNG con un font fornito. |
| Renderizzare il testo come codice Morse in formato PNG | Gli overload di rendering accettano un font, la dimensione, l’interlinea e la larghezza massima e restituiscono un flusso PNG. |
La funzionalità è stata introdotta in Aspose.Fontfor.NET23.10 (FONTNET‑602 – Supporto per la codifica del codice Morse).
Perché usarlo?
- Soluzione Pure‑C#: nessuna libreria esterna, nessuna dipendenza a livello di sistema operativo.
- Funziona con qualsiasi font che contenga i glifi richiesti (TrueType, OpenType, CFF…).
- L’euristica incorporata seleziona automaticamente l’alfabeto corretto (latino, greco, cirillico e così via) quando lo ometti.
- Sono disponibili sia testo → identificatori di glifi (per pipeline di rendering personalizzate) sia testo → PNG Morse.
- Completamente coperto dal supporto di Aspose (forum, documenti, demo live).
Iniziare
1 Installare il pacchetto NuGet
1dotnet add package Aspose.Font2 Aggiungere spazi dei nomi (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;Panoramica dell’API
1 Fabbrica – punto di ingresso
Creare un’istanza di TextUtilsFactory con new TextUtilsFactory(), quindi chiamare i relativi metodi di istanza:
| Metodo | Restituisce | Descrizione |
|---|---|---|
GetFontMorseEncoder() | IFontMorseEncoder | Codifica il testo in identificatori di glifi o in un flusso PNG utilizzando un font fornito |
GetMorseEncoder() | IMorseEncoder | Codifica il testo in una stringa Morse senza font |
GetFontMorseDecoder() | IFontMorseDecoder | Decodifica il Morse in identificatori di glifi o in un flusso PNG utilizzando un font fornito |
GetMorseDecoder() | IMorseDecoder | Decodifica una stringa Morse in testo normale senza font |
La fabbrica si trova in Aspose.Font.Factories.TextUtilsFactory (aggiunto nel 23.10).
2 interfacce principali
“IFontMorseEncoder”.
Gli overload per i glifi restituiscono GlyphId[]. Gli overload di rendering restituiscono uno Stream PNG che il chiamante deve rilasciare dopo averlo copiato o utilizzato.
| Risultato | Parametri |
|---|---|
GlyphId[] | Testo e un’istanza IFont, con rilevamento automatico dell’alfabeto o un valore MorseAlphabets esplicito |
PNG Stream | Testo, un’istanza IFont, fontSize, RenderingUtils.LineSpacingType, lineSpacingValue e maxWidth; un altro overload consente di specificare l’alfabeto |
LineSpacingType supporta Pixels e PercentOfFontHeight. Il renderer calcola l’altezza dell’immagine; non esiste un parametro per un’altezza fissa.
I caratteri facoltativi inputSeparator e outputSeparator delimitano le parole. Durante la codifica, i valori predefiniti sono rispettivamente uno spazio e /. Non sostituiscono i simboli di punto e linea del codice Morse.
“IFontMorseDecoder”.
IFontMorseDecoder accetta una stringa Morse, un font e un valore MorseAlphabets esplicito. Restituisce GlyphId[] per il testo decodificato oppure uno Stream PNG se vengono forniti parametri di rendering. Non restituisce testo normale.
Utilizzare IMorseDecoder per ottenere una string decodificata senza caricare un font. Durante la decodifica, inputSeparator è / per impostazione predefinita e outputSeparator è uno spazio.
IMorseEncoder / IMorseDecoder.
Funzionano solo con stringhe grezze (nessun carattere coinvolto). Usali quando hai solo bisogno di sequenze “punto-linea”.
3 Enumerazione di supporto – “Alfabeti Morse”.
| Valore | Script |
|---|---|
Latino | Inglese e la maggior parte delle lingue occidentali |
Greco | Lettere greche |
Cirillico | Russo, bulgaro, ecc. |
Ebraico | Lettere ebraiche |
Arabo | Scrittura araba |
Portoghese | Simboli specifici del portoghese |
Curdo | Lettere curde |
Persiano | Lettere persiane/farsi |
Se ometti l’enumerazione, il codificatore tenta il rilevamento automatico.
Esempi pratici
Gli esempi basati su font utilizzano TTF/LatoWeb-Regular.ttf. Impostare DataDir sulla directory che contiene la cartella TTF e OutputDir su una directory di output esistente. La decodifica in testo normale non richiede un font.
- Codifica in ID glifi
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())));Risultato: un array di oggetti GlyphId che rappresentano i simboli Morse, adatto a pipeline di disegno personalizzate.
- Codifica e renderizza un PNG
Questo frammento riutilizza font ed encoder dell’esempio precedente. Salva morse.png in 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}Il PNG rappresenta il codice Morse utilizzando i glifi di punto (.) e linea (-) del font. I parametri dei caratteri controllano i separatori di parole, non simboli alternativi di punto e linea.
- Decodifica in testo normale
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); // SOSQuando durante la codifica è stato utilizzato un alfabeto personalizzato, passa lo stesso valore “MorseAlphabets” al decodificatore.
- Esempio combinato (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}");L’esempio combinato salva callme.png in OutputDir, stampa gli identificatori dei glifi codificati e decodifica ... --- ... in SOS. Utilizzare gli spazi dei nomi e la configurazione delle directory indicati sopra.
Dimostrazione in linea
Aspose fornisce una demo web gratuita per provare il traduttore senza installare nulla:
Caratteristiche della demo:
- Testo ↔︎ Morse ↔︎ Rendering glifi
- Scegli caratteri punto/trattino personalizzati
- Scarica il PNG generato o visualizza gli ID dei glifi
Note sulla versione
Aspose.Font for .NET 23.10
Added APIs:TextUtilsFactory,IFontMorseEncoder,IFontMorseDecoder,IMorseEncoder,IMorseDecoder, enumerationMorseAlphabets.
New Feature: “Support for Morse code encoding”.
Quando utilizzare quale sovraccarico
| Situazione | Sovraccarico consigliato |
|---|---|
| Sono necessari solo identificatori di glifi per l’ulteriore elaborazione | Encode(string text, IFont font) (o con alfabeto esplicito) |
| Ottenere un flusso PNG senza gestire il codice di rendering | Utilizzare l’overload con fontSize, lineSpacingType, lineSpacingValue e maxWidth |
| Separatori di parole personalizzati | Impostare inputSeparator e outputSeparator; questi parametri non modificano i simboli di punto e linea |
| La lingua di origine utilizza un alfabeto non latino e il rilevamento automatico fallisce | Passa esplicitamente il valore MorseAlphabets appropriato |
Riepilogo
Aspose.Font ora include un motore completo di traduzione del codice Morse che opera sia a livello di glifi che a livello di bitmap. Utilizzando i semplici metodi di fabbrica puoi iniziare immediatamente a codificare, decodificare e rendere testo negli alfabeti supportati senza scrivere le tue tabelle di mappatura o occuparti del rendering di basso livello.
Sia che tu stia costruendo:
- Un componente personalizzato per la visualizzazione del segnale
- Uno strumento educativo per insegnare la comunicazione Morse
- Una fase di offuscamento dei dati che memorizza le informazioni come caratteri stilizzati
l’API ti offre il pieno controllo mantenendo il codice pulito, multipiattaforma e completamente supportato.