Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 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Конкретні бібліотеки。 Під час компіляції для операційних систем поза 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(Ім'я файлу рядка, IntPtr& bitmap)
        /_/src/libraries/System.Drawing.Common/src/System/Drawing/Bitmap.cs(42,0): на System.Drawing.Bitmap.. ctor(Ім'я файлу рядка, булеве використанняIcm)
        /_/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 ---
Apr 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 запобігає активації події parent click
 Орендодавець| Опубліковано 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 у 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 Ядро (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