Varem, kui arendati ASP.NET projekte .NET raamistikuga, paigaldati need kõik Windowsi süsteemidele ning neid ei saanud platvormideülesed, seega saab System.Drawing abil genereerida pildi verifitseerimiskoode järgmiselt:
Veebipõhiseks arendamiseks .NET Core projektidega, pildicaptchade genereerimine nõuab viitamist System.Drawing.Common teekile, kuid praeguSystem.Drawing.Common NuGet pakett on nüüd rühmitatud järgmiselt:WindowsSpetsiifilised raamatukogud。 Kui kompileerida mitte-Windowsi operatsioonisüsteemidele, hoiatab Platform Analyzer kompileerimise ajal. Nagu näidatud järgmises joonises:
See kõnesait on ligipääsetav kõigil platvormidel. 'Font' on toetatud ainult 'akendel'.
Enne .NET 6 ei tekitanud System.Drawing.Common paketi kasutamine kompileerimisaegseid hoiatusi ega käivitamise erandeid. Alates .NET 6-st väljastab Platform Analyzer kompileerimisaegse hoiatuse, kui kompileeritakse viitekoodi mitte-Windowsi operatsioonisüsteemidele. Samuti, kui konfiguratsioonivalik pole seatud, visatakse järgmine käitusaegne erand:
System.TypeInitializationException : 'Gdip' tüübi initsialiseerija viskas erandi. ---- System.PlatformNotSupportedException : System.Drawing.Common ei ole toetatud mitte-Windowsi platvormidel. NägemaHüperlingi sisselogimine on nähtav.Lisainfo saamiseks. Stack Trace: aadressil System.Drawing.SafeNativeMethods.Gdip.GdipCreateBitmapFromFile(stringifailinimi, IntPtr& bitmap) /_/src/libraries/System.Drawing.Common/src/System/Drawing/Bitmap.cs(42,0): aadressil System.Drawing.Bitmap.. ctor(Stringi failinimi, Boole'i useIcm) /_/src/libraries/System.Drawing.Common/src/System/Drawing/Bitmap.cs(25,0): aadressil System.Drawing.Bitmap.. ctor(Stringi failinimi) /_/src/libraries/System.Resources.ResourceManager/tests/ResourceManagerTests.cs(270,0): aadressil System.Resources.Tests.ResourceManagerTests.EnglishImageResourceData()+ MoveNext() /_/src/libraries/System.Linq/src/System/Linq/Select.cs(136,0): aadressil System.Linq.Enumerable.SelectEnumerableIterator'2.MoveNext() ----- Sisemise virna jälg ----- /_/src/libraries/System.Drawing.Common/src/System/Drawing/LibraryResolver.cs(31,0): aadressil System.Drawing.LibraryResolver.EnsureRegistered() /_/src/libraries/System.Drawing.Common/src/System/Drawing/GdiplusNative.Unix.cs(65,0): aadressil System.Drawing.SafeNativeMethods.Gdip.PlatformInitialize() /_/src/libraries/System.Drawing.Common/src/System/Drawing/Gdiplus.cs(27,0): aadressil System.Drawing.SafeNativeMethods.Gdip.. cctor() Vea viide:
Platvormideülese pilditöötluse jaoks soovitab Microsofti ametlik dokumentatsioon kasutada järgmisi teeke:
- ImageSharp
- SkiaSharp
- Microsoft.Maui.Graphics
Viide:Hüperlingi sisselogimine on nähtav.
See artikkel kasutab SkiaSharpi teeki graafilise CAPTCHA genereerimiseks,SkiaSharp on platvormideülene 2D graafika API .NET platvormile, mis põhineb Google'i Skia graafikateegil (skia.org).。 See pakub terviklikku 2D API-d, mida saab kasutada mobiili-, serveri- ja lauaarvutimudelites piltide renderdamiseks.
Aadress:Hüperlingi sisselogimine on nähtav.
Esiteks, loo uus ASP.NET Core 6 projekt ja viideSkiaSharpAsjakohased raamatukogud on järgmised:
Pane tähele, et kui projekt tuleb juurutada Linuxi süsteemi, on viited vajalikudSkiaSharp.NativeAssets.Linuxklassi, vastasel juhul on viga järgmine:
Apr 03 18:51:06 raspberrypi dotnet[6203]: fail: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1] 03. aprill 18:51:06 raspberrypi dotnet[6203]: Taotluse täitmisel tekkis käsitlemata erand. 03. aprill 18:51:06 raspberrypi dotnet[6203]: System.TypeInitializationException: 'SkiaSharp.SKImageInfo' tüübi algataja viskas erandi. 03. aprill 18:51:06 raspberrypi dotnet[6203]: ---> System.DllNotFoundException: Ei õnnestunud laadida jagatud teeki 'libSkiaSharp' ega selle sõltuvusi. Laadimisprobleemide diagnoosimiseks kaaluge LD_DEBUG keskkonnamuutuja määramist: liblibSkiaSharp: cannot open shared object file: No such file and directory 03. aprill 18:51:06 raspberrypi dotnet[6203]: at SkiaSharp.SkiaApi.sk_colortype_get_default_8888() 03. aprill 18:51:06 raspberrypi dotnet[6203]: SkiaSharp.SKImageInfo:. cctor() Apr 03 18:51:06 raspberrypi dotnet[6203]: --- Sisemise erandi virna jälje lõpp --- 03. aprill 18:51:06 raspberrypi dotnet[6203]: aadressil 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 03. aprill 18:51:06 raspberrypi dotnet[6203]: aadressil HomeCloud.Controllers.HomeController.Test() in C:\Users\itsvse_pc\source\repos\ConsoleApp1\HomeCloud\Controllers\HomeController.cs :rida 80 03. aprill 18:51:06 raspberrypi dotnet[6203]: at lambda_method34(Sulgemine, Objekt, Objekt[] ) Selleks, et arvestada, et mõned fondifondid võivad erinevates süsteemides puududa, mistõttu ei saa kontrollikoodi infot normaalselt kuvada, peame fondid käsitsi projekti kopeerima, looma projektis uue fontide kausta ja kopeerima fondid sinna, nagu alloleval joonisel näidatud:
Konfiguratsioon on järgmine:
Internetis olevate viitematerjalide kohaselt on testi graafiline verifitseerimiskood järgmine:
Genereeritud CAPTCHA-l on kaks puudust:CAPTCHA on täiesti must (OCR-i poolt kergesti äratuntav) ja CAPTCHA tähed on tihedalt kokku surutud ilma vahetaNende kahe probleemi lahendamiseks optimeerisin koodi järgmiselt:
HomeControlleri kontrolleri kood on järgmine:
Lõplikud renderdused on järgmised:
Lõpuks lisa fondifail:
Turistid, kui soovite näha selle postituse peidetud sisu, palun Vastuse
(Lõpp)
|