|
|
Veröffentlicht am 04.04.2022, 12:25:53
|
|
|
|

Früher wurden ASP.NET Projekte mit dem .NET Framework alle auf Windows-Systemen bereitgestellt und konnten plattformübergreifend sein, sodass Sie System.Drawing verwenden können, um Bildverifizierungscodes wie folgt zu generieren:
Für die Online-Entwicklung mit .NET Core-Projekten erfordert die Erstellung von Bildcaptchas einen Bezug auf die System.Drawing.Common-Bibliothek, aber vorerstDas System.Drawing.Common NuGet-Paket ist nun wie folgt gruppiert:FensterSpezifische Bibliotheken。 Beim Kompilieren für Nicht-Windows-Betriebssysteme warnt der Platform Analyzer zur Kompilierungszeit. Wie in der folgenden Abbildung dargestellt:
Diese Anrufseite ist auf allen Plattformen zugänglich. 'Font' wird nur unter 'Windows' unterstützt.
Vor .NET 6 erzeugte das System.Drawing.Common-Paket keine Compile-Time-Warnungen und keine Laufzeit-Ausnahmen. Ab .NET 6 gibt der Platform Analyzer beim Kompilieren von Referenzcode für Nicht-Windows-Betriebssysteme eine Kompilierungszeitwarnung aus. Außerdem wird, sofern die Konfigurationsoption nicht gesetzt ist, folgende Laufzeit-Ausnahme ausgelöst:
System.TypeInitializationException : Der Typinitialisierer für 'Gdip' hat eine Ausnahme ausgelöst. ---- System.PlatformNotSupportedException : System.Drawing.Common wird auf Nicht-Windows-Plattformen nicht unterstützt. SieheDer Hyperlink-Login ist sichtbar.Für weitere Informationen. Stapelüberwachung: bei System.Drawing.SafeNativeMethods.Gdip.GdipCreateBitmapFromFile(String-Dateiname, IntPtr& Bitmap) /_/src/libraries/System.Drawing.Common/src/System/Drawing/Bitmap.cs(42,0): bei System.Drawing.Bitmap.. ctor (String-Dateiname, boolesche useIcm) /_/src/libraries/System.Drawing.Common/src/System/Drawing/Bitmap.cs(25,0): unter System.Drawing.Bitmap.. ctor(String-Dateiname) /_/src/libraries/System.Resources.ResourceManager/tests/ResourceManagerTests.cs(270,0): bei System.Resources.Tests.ResourceManagerTests.EnglishImageResourceData()+ MoveNext() /_/src/libraries/System.Linq/src/System/Linq/Select.cs(136,0): bei System.Linq.Enumerable.SelectEnumerableIterator'2.MoveNext() ----- innere Stapel-Spur ----- /_/src/libraries/System.Drawing.Common/src/System/Drawing/LibraryResolver.cs(31,0): unter System.Drawing.LibraryResolver.EnsureRegistered() /_/src/libraries/System.Drawing.Common/src/System/Drawing/GdiplusNative.Unix.cs(65,0): bei System.Drawing.SafeNativeMethods.Gdip.PlatformInitialize() /_/src/libraries/System.Drawing.Common/src/System/Drawing/Gdiplus.cs(27,0): bei System.Drawing.SafeNativeMethods.Gdip.. cctor() Fehlerreferenz:
Für plattformübergreifende Bildverarbeitung empfiehlt Microsofts offizielle Dokumentation die Verwendung folgender Bibliotheken:
- ImageSharp
- SkiaSharp
- Microsoft.Maui.Graphics
Referenz:Der Hyperlink-Login ist sichtbar.
Dieser Artikel verwendet die SkiaSharp-Bibliothek, um grafisches CAPTCHA zu generieren,SkiaSharp ist eine plattformübergreifende 2D-Grafik-API für die .NET-Plattform, die auf Googles Skia-Grafikbibliothek (skia.org) basiert.。 Es bietet eine umfassende 2D-API, die über mobile, Server- und Desktop-Modelle hinweg verwendet werden kann, um Bilder zu rendern.
Adresse:Der Hyperlink-Login ist sichtbar.
Erstens: Erstelle ein neues ASP.NET Core 6-Projekt und eine Referenz.SkiaSharpDie entsprechenden Bibliotheken sind wie folgt:
Beachten Sie, dass Referenzen erforderlich sind, wenn das Projekt auf einem Linux-System bereitgestellt werden muss.SkiaSharp.NativeAssets.LinuxKlasse, ansonsten lautet der Fehler wie folgt:
Apr 03 18:51:06 raspberrypi dotnet[6203]: fail: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1] 03. Apr 18:51:06 raspberrypi dotnet[6203]: Während der Ausführung der Anfrage ist eine unbehandelte Ausnahme aufgetreten. 03. April 18:51:06 raspberrypi dotnet[6203]: System.TypeInitializationException: Der Typinitialisierer für 'SkiaSharp.SKImageInfo' hat eine Ausnahme ausgelöst. 03. April 18:51:06 raspberrypi dotnet[6203]: ---> System.DllNotFoundException: Kann die gemeinsame Bibliothek 'libSkiaSharp' oder eine ihrer Abhängigkeiten nicht geladen werden. Um Ladeprobleme zu diagnostizieren, sollten Sie die LD_DEBUG Umgebungsvariable setzen: libSkiaSharp: cannot open shared object file: No such file of directory 03. April 18:51:06 raspberrypi dotnet[6203]: bei SkiaSharp.SkiaApi.sk_colortype_get_default_8888() 03. Apr 18:51:06 raspberrypi dotnet[6203]: bei SkiaSharp.SKImageInfo:. cctor() 03. April 18:51:06 raspberrypi dotnet[6203]: --- Ende des inneren Ausnahmestack-Traces --- 03. Apr 18:51:06 raspberrypi dotnet[6203]: bei HomeCloud.ImageCaptcha.GetCaptcha(String captchaText, Int32 width, Int32 height, Int32 lineNum, Int32 lineStrookeWidth) in C: \Users\itsvse_pc\source\repos\ConsoleApp1\HomeCloud\ImageCaptcha.cs:Zeile 184 03. Apr 18:51:06 raspberrypi dotnet[6203]: bei HomeCloud.Controllers.HomeController.Test() in C:\Users\itsvse_pc\source\repos\ConsoleApp1\HomeCloud\Controllers\HomeController.cs :Zeile 80 03. April 18:51:06 raspberrypi dotnet[6203]: at lambda_method34(Closure , Object , Object[]) Um zu berücksichtigen, dass einige Schriftarten unter verschiedenen Systemen fehlen könnten, was dazu führt, dass Verifikationscode-Informationen nicht normal angezeigt werden können, müssen wir die Schriftarten manuell in das Projekt kopieren, einen neuen Schriftenordner im Projekt anlegen und die Schriftarten hineinkopieren, wie in der Abbildung unten gezeigt:
Die Konfiguration ist wie folgt:
Laut den Referenzmaterialien im Internet lautet der durch den Test generierte grafische Verifizierungscode wie folgt:
Das generierte CAPTCHA hat zwei Nachteile:Der CAPTCHA ist komplett schwarz (leicht von OCR erkennbar), und die CAPTCHA-Buchstaben sind ohne Abstand zusammengedrängtUm diese beiden Probleme zu lösen, habe ich den Code wie folgt optimiert:
Der HomeController-Controller-Code ist wie folgt:
Die endgültigen Darstellungen sind wie folgt:
Fügen Sie schließlich die Schriftdatei an:
Touristen, wenn ihr den versteckten Inhalt dieses Beitrags sehen wollt, bitte Antwort
(Ende)
|
Vorhergehend:[Dreh dich]. NET 6 Neue Funktion Enumerable.Chunk()Nächster:Angular verhindert das Auslösen des übergeordneten Klickereignisses
|