Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 38588|Отговор: 6

[.NET Core] ASP.NET Core (четиринадесет) е базиран на капча за изображения на SkiaSharp

[Копирай линк]
Публикувано на 2022-4-4 12:25:53 | | | |
Преди това, при разработване на ASP.NET проекти с .NET Framework, всички те бяха внедрени на Windows системи и не можеха да бъдат кросплатформени, така че можете да използвате System.Drawing за генериране на кодове за верификация на изображения, както следва:

asp.net MVC Beautiful Image captcha
https://www.itsvse.com/thread-4911-1-1.html

WebAPI реализира графична функция за верификация на кода
https://www.itsvse.com/thread-7304-1-1.html

Разработването онлайн с .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()

Препратка към грешка:

Проблеми с водния знак на .NET Core при Linux снимки
https://www.itsvse.com/thread-9605-1-1.html

За кросплатформена обработка на изображения, официалната документация на 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 е следният:

Крайните визуализации са следните:


Накрая, прикачете файла с шрифт:

Туристи, ако искате да видите скритото съдържание на този пост, моляОтговор


(Край)




Предишен:[Завърти]. NET 6 Нова функция Enumerable.chunk()
Следващ:Angular предотвратява задействането на родителското клик събитие
 Хазяин| Публикувано на 2022-4-4 12:28:35 |
преглед

ASP.NET Core (XIII), за да определи дали е заявка на Ajax или не
https://www.itsvse.com/thread-10284-1-1.html

ASP.NET Core (дванадесет) фронтенд JS, CSS пакетиране и компресия
https://www.itsvse.com/thread-10282-1-1.html

ASP.NET Маршрутът на крайната точка на Core (XI) добавя междинен софтуер за показване на всички DI услуги
https://www.itsvse.com/thread-10269-1-1.html

ASP.NET Подробно обяснение на приоритетите на конфигурацията в Core(10).
https://www.itsvse.com/thread-10265-1-1.html

ASP.NET Подробно обяснение на междинния софтуер на Core (9).
https://www.itsvse.com/thread-9647-1-1.html

ASP.NET Подробно обяснение на основния междинен софтуер
https://www.itsvse.com/thread-8126-1-1.html

ASP.NET яма с стандартните параметри на Swagger UI в Core(8).
https://www.itsvse.com/thread-9640-1-1.html

ASP.NET Ядро (7) Задълбочен анализ на изходния код на рамката
https://www.itsvse.com/thread-9601-1-1.html

ASP.NET Core (VI) DI ръчно получава метода за инжектиране на обекти
https://www.itsvse.com/thread-9595-1-1.html

ASP.NET Core (пет) се базира на разпределени транзакции с CAP
https://www.itsvse.com/thread-9593-1-1.html

ASP.NET Филтър Core(4) унифицирана валидация на модела ModelState
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET Ядро (iii) Динамично създаване на инстанции чрез ActivatorUtilities
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET Ядро (2) Рестартиране на приложението чрез код
https://www.itsvse.com/thread-9480-1-1.html

ASP.NET Core (1) използва кеширане на Redis
https://www.itsvse.com/thread-9393-1-1.html
Публикувано на 2022-4-4 15:02:24 |
Научи се да учиш
Публикувано на 2022-4-13 08:58:42 |
Това е добро, харесва ми. Благодаря, че сподели!
Публикувано на 2022-4-14 09:46:41 |
Научи как функционира големият, благодаря, че сподели
Публикувано на 2022-8-5 16:25:05 |
Шефът е работил здраво
 Хазяин| Публикувано на 2024-11-25 10:33:43 |
SixLabors.ImageSharp е също отлична библиотека за кросплатформена обработка на изображения
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com