Prej so bili pri razvoju ASP.NET projektov z uporabo .NET Framework vsi nameščeni na Windows sistemih in niso mogli biti večplatformski, zato lahko uporabite System.Drawing za generiranje kod za preverjanje slik, kot sledi:
Za spletni razvoj z .NET Core projekti je za generiranje slikovnih captcha potrebna referenca na knjižnico System.Drawing.Common, vendar za zdajPaket System.Drawing.Common NuGet je zdaj združen kot:WindowsSpecifične knjižnice。 Pri prevajanju za operacijske sisteme, ki niso Windows, Platform Analyzer opozori med prevajanjem. Kot je prikazano na naslednji sliki:
Ta klicna stran je dostopna na vseh platformah. 'Font' je podprt samo na 'Windows'.
Pred .NET 6 uporaba paketa System.Drawing.Common ni generirala nobenih opozoril med prevajanjem in ni vrgla nobenih izjem med izvajanjem. Od .NET 6 naprej Platform Analyzer pri prevajanju referenčne kode za operacijske sisteme, ki niso Windows, izda opozorilo o času prevajanja. Prav tako, če konfiguracijska možnost ni nastavljena, se med izvajanjem sproži naslednja izjema:
System.TypeInitializationException : Inicializator tipa za 'Gdip' je vrgel izjemo. ---- System.PlatformNotSupportedException : System.Drawing.Common ni podprt na ne-Windows platformah. VidetiPrijava do hiperpovezave je vidna.za več informacij. Stack Trace: na System.Drawing.SafeNativeMethods.Gdip.GdipCreateBitmapFromFile(Ime datoteke nizov, IntPtr& bitmap) /_/src/libraries/System.Drawing.Common/src/System/Drawing/Bitmap.cs(42,0): na System.Drawing.Bitmap.. ctor(String file name, Boolean useIcm) /_/src/libraries/System.Drawing.Common/src/System/Drawing/Bitmap.cs(25,0): na System.Drawing.Bitmap.. ctor(String datotečno ime) /_/src/libraries/System.Resources.ResourceManager/tests/ResourceManagerTests.cs(270,0): na System.Resources.Tests.ResourceManagerTests.EnglishImageResourceData()+ MoveNext() /_/src/libraries/System.Linq/src/System/Linq/Select.cs(136,0): na System.Linq.Enumerable.SelectEnumerableIterator'2.MoveNext() ----- Inner Stack Trace ----- /_/src/libraries/System.Drawing.Common/src/System/Drawing/LibraryResolver.cs(31,0): na System.Drawing.LibraryResolver.EnsureRegistered() /_/src/libraries/System.Drawing.Common/src/System/Drawing/GdiplusNative.Unix.cs(65,0): na System.Drawing.SafeNativeMethods.Gdip.PlatformInitialize() /_/src/libraries/System.Drawing.Common/src/System/Drawing/Gdiplus.cs(27,0): na System.Drawing.SafeNativeMethods.Gdip.. cctor() Referenca na napako:
Za obdelavo slik na več platformah Microsoftova uradna dokumentacija priporoča uporabo naslednjih knjižnic:
- ImageSharp
- SkiaSharp
- Microsoft.Maui.Graphics
Referenčni:Prijava do hiperpovezave je vidna.
Ta članek uporablja knjižnico SkiaSharp za generiranje grafičnega CAPTCHA,SkiaSharp je večplatformski 2D grafični API za platformo .NET, ki temelji na Googlovi grafični knjižnici Skia (skia.org).。 Ponuja celovit 2D API, ki ga je mogoče uporabljati na mobilnih, strežniških in namiznih modelih za upodabljanje slik.
Naslov:Prijava do hiperpovezave je vidna.
Najprej ustvarite nov projekt ASP.NET Core 6 in referencoSkiaSharpRelevantne knjižnice so naslednje:
Upoštevajte, da če je treba projekt namestiti na Linux sistem, so potrebne referenceSkiaSharp.NativeAssets.Linuxrazred, sicer bo napaka naslednja:
Apr 03 18:51:06 raspberrypi dotnet[6203]: fail: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1] 3. april 18:51:06 raspberrypi dotnet[6203]: Med izvajanjem zahteve je prišlo do neobdelane izjeme. 3. april 18:51:06 raspberrypi dotnet[6203]: System.TypeInitializationException: Inicializator za 'SkiaSharp.SKImageInfo' je vrgel izjemo. 3. april 18:51:06 raspberrypi dotnet[6203]: ---> System.DllNotFoundException: Ni mogoče naložiti skupne knjižnice 'libSkiaSharp' ali katere od njenih odvisnosti. Da bi lažje diagnosticirali težave z nalaganjem, razmislite o nastavitvi LD_DEBUG okoljske spremenljivke: liblibSkiaSharp: ne more odpreti datoteke deljenih objektov: Ni takšne datoteke ali mape 3. april 18:51:06 raspberrypi dotnet[6203]: at SkiaSharp.SkiaApi.sk_colortype_get_default_8888() 3. april 18:51:06 raspberrypi dotnet[6203]: na SkiaSharp.SKImageInfo:. cctor() 3. april 18:51:06 raspberrypi dotnet[6203]: --- Konec inner exception stack trace --- Apr 03 18:51:06 raspberrypi dotnet[6203]: at HomeCloud.ImageCaptcha.GetCaptcha(String captchaText, Int32 width, Int32 height, Int32 lineNum, Int32 lineStrookeWidth) v C: \Uporabniki\itsvse_pc\source\repos\ConsoleApp1\HomeCloud\ImageCaptcha.cs:linija 184 3. april 18:51:06 raspberrypi dotnet[6203]: at HomeCloud.Controllers.HomeController.Test() v C:\Users\itsvse_pc\source\repos\ConsoleApp1\HomeCloud\Controllers\HomeController.cs :linija 80 Apr 03 18:51:06 raspberrypi dotnet[6203]: at lambda_method34(Closure , Object , Object[] ) Da bi upoštevali, da nekatere pisave morda manjkajo v različnih sistemih, kar pomeni nemožnost običajnega prikaza informacij o verifikacijski kodi, moramo pisave ročno kopirati v projekt, ustvariti novo mapo pisav v projektu in vanjo kopirati pisave, kot je prikazano na spodnji sliki:
Konfiguracija je naslednja:
Po referenčnih materialih na internetu je grafična verifikacijska koda, ki jo generira test, naslednja:
Generirani CAPTCHA ima dve slabosti:CAPTCHA je povsem črn (OCR ga zlahka prepozna), črke CAPTCHA pa so stisnjene skupaj brez kakršnegakoli razmikaDa bi rešil ti dve težavi, sem kodo optimiziral na naslednji način:
Koda krmilnika HomeController je naslednja:
Končne upodobitve so naslednje:
Na koncu priložite datoteko pisave:
Turisti, če želite videti skrito vsebino te objave, prosim Odgovoriti
(Konec)
|