Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 38588|Risposta: 6

[.NET Core] ASP.NET Core (quattordici) si basa sul captcha dell'immagine SkiaSharp

[Copiato link]
Pubblicato il 4-04-2022 12:25:53 | | | |
In precedenza, durante lo sviluppo di ASP.NET progetti usando il .NET Framework, venivano tutti distribuiti su sistemi Windows e non potevano essere multipiattaforma, quindi si può usare System.Drawing per generare codici di verifica delle immagini, come segue:

asp.net captcha bellissima immagine MVC
https://www.itsvse.com/thread-4911-1-1.html

WebAPI implementa la funzione di codice di verifica grafica
https://www.itsvse.com/thread-7304-1-1.html

Sviluppando online con progetti .NET Core, generare captcha di immagini richiede riferimento alla libreria System.Drawing.Common, ma per oraIl pacchetto System.Drawing.Common NuGet è ora raggruppato come:FinestreBiblioteche specifiche。 Quando si compila per sistemi operativi non Windows, il Platform Analyzer avvisa al momento della compilazione. Come mostrato nella figura seguente:

Questo sito di chiamata è accessibile su tutte le piattaforme. 'Font' è supportato solo su 'windows'.



Prima di .NET 6, l'uso del pacchetto System.Drawing.Common non generava alcun avviso in tempo di compilazione e non veniva rilasciata eccezioni a runtime. A partire da .NET 6, il Platform Analyzer emette un avviso di compilazione durante la compilazione di codice di riferimento per sistemi operativi non Windows. Inoltre, a meno che l'opzione di configurazione non sia impostata, verrà lanciata la seguente eccezione runtime:


System.TypeInitializationException : L'inizializzatore di tipo per 'Gdip' ha lanciato un'eccezione.
      ---- System.PlatformNotSupportedException : System.Drawing.Common non è supportato su piattaforme non Windows. VedereIl login del link ipertestuale è visibile.Per maggiori informazioni.
      Traccia dello stack:
           su System.Drawing.SafeNativeMethods.Gdip.GdipCreateBitmapFromFile(Stringname file, IntPtr& bitmap)
        /_/src/libraries/System.Drawing.Common/src/System/Drawing/Bitmap.cs(42,0): su System.Drawing.Bitmap.. ctor(Nome file stringa, uso booleano)
        /_/src/libraries/System.Drawing.Common/src/System/Drawing/Bitmap.cs(25,0): su System.Drawing.Bitmap.. ctor(Nome file stringa)
        /_/src/libraries/System.Resources.ResourceManager/tests/ResourceManagerTests.cs(270,0): su System.Resources.Tests.ResourceManagerTests.EnglishImageResourceData()+ MoveNext()
        /_/src/libraries/System.Linq/src/System/Linq/Select.cs(136,0): at System.Linq.Enumerable.SelectEnumerableIterator'2.MoveNext()
        ----- Traccia dello stack interno -----
        /_/src/libraries/System.Drawing.Common/src/System/Drawing/LibraryResolver.cs(31,0): su System.Drawing.LibraryResolver.EnsureRegistered()
        /_/src/libraries/System.Drawing.Common/src/System/Drawing/GdiplusNative.Unix.cs(65,0): su System.Drawing.SafeNativeMethods.Gdip.PlatformInitialize()
        /_/src/libraries/System.Drawing.Common/src/System/Drawing/Gdiplus.cs(27,0): su System.Drawing.SafeNativeMethods.Gdip.. cctor()

Riferimento all'errore:

Problemi di filigrana .NET Core nelle immagini Linux
https://www.itsvse.com/thread-9605-1-1.html

Per l'elaborazione immagini multipiattaforma, la documentazione ufficiale di Microsoft raccomanda di utilizzare le seguenti librerie:

  • ImageSharp
  • SkiaSharp
  • Microsoft.Maui.Graphics

Riferimento:Il login del link ipertestuale è visibile.

Questo articolo utilizza la libreria SkiaSharp per generare CAPTCHA grafico,SkiaSharp è un'API grafica 2D multipiattaforma per la piattaforma .NET basata sulla libreria grafica Skia (skia.org) di Google.。 Offre un'API 2D completa che può essere utilizzata su modelli mobili, server e desktop per renderizzare immagini.

Indirizzo:Il login del link ipertestuale è visibile.

Per prima cosa, crea un nuovo progetto e riferimento ASP.NET Core 6SkiaSharpLe biblioteche rilevanti sono le seguenti:

Si noti che se il progetto deve essere distribuito su un sistema Linux, sono necessarie delle referenzeSkiaSharp.NativeAssets.Linuxclasse, altrimenti l'errore sarà il seguente:

Apr 03 18:51:06 raspberrypi dotnet[6203]: fail: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1]
Apr 03 18:51:06 raspberrypi dotnet[6203]: Si è verificata un'eccezione non gestita durante l'esecuzione della richiesta.
Apr 03 18:51:06 raspberrypi dotnet[6203]: System.TypeInitializationException: L'inizializzatore di tipo per 'SkiaSharp.SKImageInfo' ha lanciato un'eccezione.
Apr 03 18:51:06 raspberrypi dotnet[6203]: ---> System.DllNotFoundException: Impossibile caricare la libreria condivisa 'libSkiaSharp' o una delle sue dipendenze. Per aiutare a diagnosticare i problemi di caricamento, considera di impostare la variabile di ambiente LD_DEBUG: liblibSkiaSharp: cannot open shared object file: No such file or directory
Apr 03 18:51:06 raspberrypi dotnet[6203]: a SkiaSharp.SkiaApi.sk_colortype_get_default_8888()
Apr 03 18:51:06 raspberrypi dotnet[6203]: su SkiaSharp.SKImageInfo:. cctor()
03 apr 18:51:06 raspberrypi dotnet[6203]: --- Fine della traccia dello stack di eccezioni interne ---
Apr 03 18:51:06 raspberrypi dotnet[6203]: su HomeCloud.ImageCaptcha.GetCaptcha(String captchaText, Int32 width, Int32 height, Int32 lineNum, Int32 lineStrookeWidth) in C: \Users\itsvse_pc\source\repos\ConsoleApp1\HomeCloud\ImageCaptcha.cs:line 184
Apr 03 18:51:06 raspberrypi dotnet[6203]: su HomeCloud.Controllers.HomeController.Test() in C:\Users\itsvse_pc\source\repos\ConsoleApp1\HomeCloud\Controllers\HomeController.cs :linea 80
Apr 03 18:51:06 raspberrypi dotnet[6203]: a lambda_method34(Chiusura , Oggetto, Oggetto[] )

Per considerare che alcuni font potrebbero mancare in sistemi diversi, con il risultato che non è possibile visualizzare normalmente le informazioni del codice di verifica, dobbiamo copiare manualmente i font nel progetto, creare una nuova cartella fonts nel progetto e copiarvi i font, come mostrato nella figura sottostante:



La configurazione è la seguente:

Secondo i materiali di riferimento su Internet, il codice grafico di verifica generato dal test è il seguente:



Il CAPTCHA generato presenta due svantaggi:Il CAPTCHA è tutto nero (facilmente riconoscibile dall'OCR), e le lettere CAPTCHA sono ammassate senza spaziaturaPer risolvere questi due problemi, ho ottimizzato il codice come segue:

Il codice del controller HomeController è il seguente:

Le rappresentazioni finali sono le seguenti:


Infine, allega il file font:

Turisti, se volete vedere il contenuto nascosto di questo post, vi pregoRisposta


(Fine)




Precedente:[Gira]. NET 6 Nuova Funzionalità Enumerable.Chunk()
Prossimo:Angular impedisce l'attivazione dell'evento di click genitore
 Padrone di casa| Pubblicato il 4-04-2022 12:28:35 |
recensione

ASP.NET Core (XIII) per determinare se si tratta di una richiesta Ajax o meno
https://www.itsvse.com/thread-10284-1-1.html

ASP.NET Core (dodici) front-end JS, bundle CSS e compressione
https://www.itsvse.com/thread-10282-1-1.html

ASP.NET percorso endpoint Core (XI) aggiunge middleware per visualizzare tutti i servizi DI
https://www.itsvse.com/thread-10269-1-1.html

ASP.NET Spiegazione dettagliata delle priorità di configurazione in Core(10).
https://www.itsvse.com/thread-10265-1-1.html

ASP.NET Spiegazione dettagliata del middleware Middleware di Core (9).
https://www.itsvse.com/thread-9647-1-1.html

ASP.NET Spiegazione dettagliata del Middleware Core
https://www.itsvse.com/thread-8126-1-1.html

ASP.NET fosso dei parametri predefiniti dell'interfaccia di Swagger in Core(8).
https://www.itsvse.com/thread-9640-1-1.html

ASP.NET Core (7) Analisi approfondita del codice sorgente del framework
https://www.itsvse.com/thread-9601-1-1.html

ASP.NET Core (VI) DI ottiene manualmente il metodo di iniezione degli oggetti
https://www.itsvse.com/thread-9595-1-1.html

ASP.NET Core (cinque) si basa sulle transazioni distribuite CAP
https://www.itsvse.com/thread-9593-1-1.html

ASP.NET Filtro Core(4) validazione unificata del modello ModelState
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET Core (iii) Creare dinamicamente istanze usando ActivatorUtilities
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET Core (2) Riavvia l'applicazione tramite codice
https://www.itsvse.com/thread-9480-1-1.html

ASP.NET Core (1) utilizza la cache Redis
https://www.itsvse.com/thread-9393-1-1.html
Pubblicato il 4-4-2022 15:02:24 |
Impara a imparare
Pubblicato il 13-04-2022 08:58:42 |
È buono, mi piace. Grazie per aver condiviso!
Pubblicato il 14-04-2022 09:46:41 |
Impara il funzionamento del gigante, grazie per aver condiviso
Pubblicato il 5-8-2022 16:25:05 |
Il capo ha lavorato sodo
 Padrone di casa| Pubblicato il 25-11-2024 10:33:43 |
SixLabors.ImageSharp è anche un'ottima libreria per l'elaborazione immagini cross-platform
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com