Agrāk, izstrādājot ASP.NET projektus, izmantojot .NET Framework, tie visi tika izvietoti Windows sistēmās, un tie nevarēja būt starpplatformas, tāpēc varat izmantot System.Drawing, lai ģenerētu attēlu verifikācijas kodus šādi:
Izstrādājot tiešsaistē ar .NET Core projektiem, attēlu captchas ģenerēšanai ir nepieciešama atsauce uz System.Drawing.Common bibliotēku, bet pagaidāmSystem.Drawing.Common NuGet pakotne tagad ir grupēta kā:WindowsĪpašas bibliotēkas。 Kompilējot operētājsistēmām, kas nav Windows, platformas analizators brīdina kompilācijas laikā. Kā parādīts nākamajā attēlā:
Šī zvanīšanas vietne ir pieejama visās platformās. 'Fonts' tiek atbalstīts tikai 'Windows'.
Pirms .NET 6, izmantojot System.Drawing.Common pakotni, netika ģenerēti nekādi kompilācijas laika brīdinājumi un netika radīti izpildlaika izņēmumi. Sākot ar .NET 6, platformas analizators izdod kompilācijas laika brīdinājumu, kompilējot atsauces kodu operētājsistēmām, kas nav Windows. Turklāt, ja nav iestatīta konfigurācijas opcija, tiks izmests šāds izpildlaika izņēmums:
System.TypeInitializationException : 'Gdip' tipa inicializators radīja izņēmumu. ---- System.PlatformNotSupportedException : System.Drawing.Common netiek atbalstīts platformās, kas nav Windows. RedzētHipersaites pieteikšanās ir redzama.lai iegūtu vairāk informācijas. Steka izsekošana: vietnē System.Drawing.SafeNativeMethods.Gdip.GdipCreateBitmapFromFile(Virknes faila nosaukums, IntPtr& bitmap) /_/src/libraries/System.Drawing.Common/src/System/Drawing/Bitmap.cs(42,0): vietnē System.Drawing.Bitmap.. ctor(Virknes faila nosaukums, Būla lietojumsIcm) /_/src/libraries/System.Drawing.Common/src/System/Drawing/Bitmap.cs(25,0): vietnē System.Drawing.Bitmap.. ctor(Virknes faila nosaukums) /_/src/libraries/System.Resources.ResourceManager/tests/ResourceManagerTests.cs(270,0): vietnē System.Resources.Tests.ResourceManagerTests.EnglishImageResourceData()+ Pārvietot nākamo () /_/src/libraries/System.Linq/src/System/Linq/Select.cs(136,0): vietnē System.Linq.Enumerable.SelectEnumerableIterator'2.MoveNext() ----- Iekšējās steka izsekošanas ----- /_/src/libraries/System.Drawing.Common/src/System/Drawing/LibraryResolver.cs(31,0): vietnē System.Drawing.LibraryResolver.EnsureRegistered() /_/src/libraries/System.Drawing.Common/src/System/Drawing/GdiplusNative.Unix.cs(65,0): vietnē System.Drawing.SafeNativeMethods.Gdip.PlatformInitialize() /_/src/libraries/System.Drawing.Common/src/System/Drawing/Gdiplus.cs(27,0): vietnē System.Drawing.SafeNativeMethods.Gdip.. cctor() Kļūdas atsauce:
Vairāku platformu attēlu apstrādei Microsoft oficiālajā dokumentācijā ir ieteikts izmantot šādas bibliotēkas:
- AttēlsSharp
- SkiaSharp
- Microsoft.Maui.Grafika
Atsauce:Hipersaites pieteikšanās ir redzama.
Šajā rakstā tiek izmantota SkiaSharp bibliotēka, lai ģenerētu grafisko CAPTCHA,SkiaSharp ir starpplatformu 2D grafikas API .NET platformai, kuras pamatā ir Google Skia grafikas bibliotēka (skia.org).。 Tas piedāvā visaptverošu 2D API, ko attēlu atveidošanai var izmantot mobilajos, serveru un darbvirsmas modeļos.
Adrese:Hipersaites pieteikšanās ir redzama.
Vispirms izveidojiet jaunu ASP.NET Core 6 projektu un atsauciSkiaSharpAttiecīgās bibliotēkas ir šādas:
Ņemiet vērā, ka, ja projekts ir jāizvieto Linux sistēmā, ir nepieciešamas atsaucesSkiaSharp.NativeAssets.Linuxklase, pretējā gadījumā kļūda būs šāda:
Apr 03 18:51:06 raspberrypi dotnet[6203]: fail: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1] Apr 03 18:51:06 raspberrypi dotnet[6203]: Pieprasījuma izpildes laikā ir radies neapstrādāts izņēmums. Apr 03 18:51:06 raspberrypi dotnet[6203]: System.TypeInitializationException: 'SkiaSharp.SKImageInfo' tipa inicializators izmeta izņēmumu. Apr 03 18:51:06 raspberrypi dotnet[6203]: ---> System.DllNotFoundException: Nevar ielādēt koplietojamo bibliotēku "libSkiaSharp" vai kādu no tās atkarībām. Lai palīdzētu diagnosticēt ielādes problēmas, apsveriet iespēju iestatīt LD_DEBUG vides mainīgo: liblibSkiaSharp: nevar atvērt koplietojamā objekta failu: nav šāda faila vai direktorija Apr 03 18:51:06 raspberrypi dotnet[6203]: pie SkiaSharp.SkiaApi.sk_colortype_get_default_8888() Apr 03 18:51:06 raspberrypi dotnet[6203]: pie SkiaSharp.SKImageInfo:. cctor() Apr 03 18:51:06 raspberrypi dotnet[6203]: --- Iekšējā izņēmuma steka izsekošanas beigas --- Apr 03 18:51:06 raspberrypi dotnet[6203]: at HomeCloud.ImageCaptcha.GetCaptcha(String captchaText, Int32 width, Int32 height, Int32 lineNum, Int32 lineStrookeWidth) in C: \Lietotāji\itsvse_pc\source\repos\ConsoleApp1\HomeCloud\ImageCaptcha.cs:line 184 Apr 03 18:51:06 raspberrypi dotnet[6203]: at HomeCloud.Controllers.HomeController.Test() in C:\Users\itsvse_pc\source\repos\ConsoleApp1\HomeCloud\Controllers\HomeController.cs :80. rinda Apr 03 18:51:06 raspberrypi dotnet[6203]: at lambda_method34(Slēgšana , Objekts , Objekts[] ) Lai ņemtu vērā, ka dažās sistēmās var trūkt dažu fontu fontu, kā rezultātā nav iespējams normāli parādīt verifikācijas koda informāciju, mums ir manuāli jākopē fonti projektā, projektā jāizveido jauna fontu mape un jākopē fonti, kā parādīts zemāk redzamajā attēlā:
Konfigurācija ir šāda:
Saskaņā ar atsauces materiāliem internetā testa ģenerētais grafiskais verifikācijas kods ir šāds:
Ģenerētajam CAPTCHA ir divi trūkumi:CAPTCHA ir melns (viegli atpazīstams ar OCR), un CAPTCHA burti ir pārpildīti kopā bez atstarpēmLai atrisinātu šīs divas problēmas, es optimizēju kodu šādi:
HomeController kontrollera kods ir šāds:
Galīgie atveidojumi ir šādi:
Visbeidzot, pievienojiet fonta failu:
Tūristi, ja vēlaties redzēt šīs ziņas slēpto saturu, lūdzu Atbildi
(Beigas)
|