Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 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. ВидетьВход по гиперссылке виден.для получения дополнительной информации.
      Трассировка стека:
           на 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, основанный на графической библиотеке Google Skia (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: cannot open shared object file: Нет такого файла или каталога
03 апр 18:51:06 raspberrypi dotnet[6203]: at 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 Подробное объяснение Core Middleware
https://www.itsvse.com/thread-8126-1-1.html

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

ASP.NET Core (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 Core (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 |
Босс много потрудился
 Хозяин| Опубликовано 25.11.2024 10:33:43 |
SixLabors.ImageSharp — отличная библиотека для кроссплатформенной обработки изображений
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com