Преди това, при разработване на ASP.NET проекти с .NET Framework, всички те бяха внедрени на Windows системи и не можеха да бъдат кросплатформени, така че можете да използвате System.Drawing за генериране на кодове за верификация на изображения, както следва:
Разработването онлайн с .NET Core проекти, генерирането на капчи на изображения изисква препратка към библиотеката System.Drawing.Common, но засегаПакетът System.Drawing.Common NuGet вече е групиран като:УиндоусСпецифични библиотеки。 При компилиране за операционни системи извън Windows, Platform Analyzer предупреждава по време на компилация. Както е показано на следващата фигура:
Този обаждащ се сайт е достъпен на всички платформи. 'Шрифт' се поддържа само на 'Windows'.
Преди .NET 6, използването на пакета System.Drawing.Common не генерираше никакви предупреждения за време на компилация и не хвърляше изключения по време на изпълнение. Започвайки с .NET 6, Platform Analyzer издава предупреждение за време на компилиране при компилиране на референтен код за операционни системи, които не са Windows. Също така, освен ако не е зададена опцията за конфигурация, ще се използва следното изключение по време на изпълнение:
System.TypeInitializationException: Инициализаторът на типове за 'Gdip' хвърли изключение. ---- System.PlatformNotSupportedException : System.Drawing.Common не се поддържа на платформи извън Windows. ВиждамВходът към хиперлинк е видим.за повече информация. Stack Trace: в System.Drawing.SafeNativeMethods.Gdip.GdipCreateBitmapFromFile(String filename, IntPtr&bitmap) /_/src/libraries/System.Drawing.Common/src/System/Drawing/Bitmap.cs(42,0): в System.Drawing.Bitmap.. ctor(Име на файл на низ, булево useIcm) /_/src/libraries/System.Drawing.Common/src/System/Drawing/Bitmap.cs(25,0): в System.Drawing.Bitmap.. ctor(Име на файл на низ) /_/src/libraries/System.Resources.ResourceManager/tests/ResourceManagerTests.cs(270,0): в System.Resources.Tests.ResourceManagerTests.EnglishImageResourceData()+ MoveNext() /_/src/libraries/System.Linq/src/System/Linq/Select.cs(136,0): в System.Linq.Enumerable.SelectEnumerableIterator'2.MoveNext() ----- Вътрешна стекова следа ----- /_/src/libraries/System.Drawing.Common/src/System/Drawing/LibraryResolver.cs(31,0): в System.Drawing.LibraryResolver.EnsureRegistered() /_/src/libraries/System.Drawing.Common/src/System/Drawing/GdiplusNative.Unix.cs(65,0): в System.Drawing.SafeNativeMethods.Gdip.PlatformInitialize() /_/src/libraries/System.Drawing.Common/src/System/Drawing/Gdiplus.cs(27,0): в System.Drawing.SafeNativeMethods.Gdip.. cctor() Препратка към грешка:
За кросплатформена обработка на изображения, официалната документация на Microsoft препоръчва използването на следните библиотеки:
- ImageSharp
- SkiaSharp
- Microsoft.Maui.Graphics
Препратка:Входът към хиперлинк е видим.
Тази статия използва библиотеката на SkiaSharp за генериране на графични CAPTCHA,SkiaSharp е кросплатформен 2D графичен API за .NET платформата, базиран на графичната библиотека Skia на Google (skia.org).。 Той предлага цялостен 2D API, който може да се използва в мобилни, сървърни и десктоп модели за рендериране на изображения.
Адрес:Входът към хиперлинк е видим.
Първо, създайте нов проект ASP.NET Core 6 и справкаSkiaSharpСъответните библиотеки са следните:
Имайте предвид, че ако проектът трябва да бъде внедрен на Linux система, са необходими референцииSkiaSharp.NativeAssets.Linuxклас, в противен случай грешката ще бъде следната:
Apr 03 18:51:06 raspberrypi dotnet[6203]: fail: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1] 03 април 18:51:06 raspberrypi dotnet[6203]: Възникна необработена изключение по време на изпълнение на заявката. 03 април 18:51:06 raspberrypi dotnet[6203]: System.TypeInitializationException: Инициализаторът на типове за 'SkiaSharp.SKImageInfo' хвърли изключение. 03 април 18:51:06 raspberrypi dotnet[6203]: ---> System.DllNotFoundException: Не може да се зареди споделената библиотека 'libSkiaSharp' или някоя от нейните зависимости. За да помогнете при диагностициране на проблеми с зареждането, помислете за задаване на променливата LD_DEBUG среда: liblibSkiaSharp: не може да отвори споделен обектен файл: Няма такъв файл или директория 03 април 18:51:06 raspberrypi dotnet[6203]: в SkiaSharp.SkiaApi.sk_colortype_get_default_8888() 03 април 18:51:06 raspberrypi dotnet[6203]: в SkiaSharp.SKImageInfo:. cctor() Apr 03 18:51:06 raspberrypi dotnet[6203]: --- End of inner exception stack trace --- Апр 03 18:51:06 raspberrypi dotnet[6203]: at HomeCloud.ImageCaptcha.GetCaptcha(String captchaText, Int32 width, Int32 height, Int32 lineNum, Int32 lineStrookeWidth) на C: \Users\itsvse_pc\source\repos\ConsoleApp1\HomeCloud\ImageCaptcha.cs:ред 184 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 03 април 18:51:06 raspberrypi dotnet[6203]: at lambda_method34(Closure , Object , Object[] ) За да се приеме, че някои шрифтове може да липсват в различни системи, което води до невъзможност да се показва информация за кодовете за проверка нормално, трябва ръчно да копираме шрифтовете в проекта, да създадем нова папка с шрифтове в проекта и да копираме шрифтовете в нея, както е показано на фигурата по-долу:
Конфигурацията е следната:
Според справочните материали в интернет, графичният код за проверка, генериран от теста, е следният:
Генерираната CAPTCHA има два недостатъка:CAPTCHA е изцяло черна (лесно разпознаваема от OCR), а буквите на CAPTCHA са натъпкани една в друга без никакво разстояниеЗа да реша тези два проблема, оптимизирах кода по следния начин:
Кодът на контролера HomeController е следният:
Крайните визуализации са следните:
Накрая, прикачете файла с шрифт:
Туристи, ако искате да видите скритото съдържание на този пост, моля Отговор
(Край)
|