Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 38588|Resposta: 6

[.NET Core] ASP.NET Core (quatorze) é baseado no captcha de imagem SkiaSharp

[Copiar link]
Postado em 2022-4-4 12:25:53 | | | |
Anteriormente, ao desenvolver ASP.NET projetos usando o .NET Framework, todos eram implantados em sistemas Windows e não podiam ser multiplataforma, então você pode usar o System.Drawing para gerar códigos de verificação de imagem, conforme segue:

asp.net captcha de imagem bonita do MVC
https://www.itsvse.com/thread-4911-1-1.html

A WebAPI implementa a função de código de verificação gráfica
https://www.itsvse.com/thread-7304-1-1.html

Desenvolvendo online com projetos .NET Core, gerar captchas de imagem requer referência à biblioteca System.Drawing.Common, mas por enquantoO pacote System.Drawing.Common NuGet agora é agrupado como:WindowsBibliotecas específicas。 Ao compilar para sistemas operacionais que não são Windows, o Platform Analyzer alerta em tempo de compilação. Como mostrado na figura a seguir:

Este site de chamadas está acessível em todas as plataformas. 'Fonte' é suportado apenas em 'janelas'.



Antes do .NET 6, usar o pacote System.Drawing.Common não gerava nenhum aviso em tempo de compilação e não lançava exceções em tempo de execução. A partir do .NET 6, o Platform Analyzer emite um aviso em tempo de compilação ao compilar código de referência para sistemas operacionais que não sejam Windows. Além disso, a menos que a opção de configuração esteja definida, a seguinte exceção em tempo de execução será lançada:


System.TypeInitializationException : O inicializador de tipo para 'Gdip' gerava uma exceção.
      ---- System.PlatformNotSupportedException : System.Drawing.Common não é suportado em plataformas que não sejam Windows. VerO login do hiperlink está visível.Para mais informações.
      Rastreamento de Pilha:
           em System.Drawing.SafeNativeMethods.Gdip.GdipCreateBitmapFromFile(String filename, IntPtr& bitmap)
        /_/src/libraries/System.Drawing.Common/src/System/Drawing/Bitmap.cs(42,0): em System.Drawing.Bitmap.. ctor(Nome de arquivo de string, useIcm booleano)
        /_/src/libraries/System.Drawing.Common/src/System/Drawing/Bitmap.cs(25,0): em System.Drawing.Bitmap.. ctor(nome do arquivo da string)
        /_/src/libraries/System.Resources.ResourceManager/tests/ResourceManagerTests.cs(270,0): em System.Resources.Tests.ResourceManagerTests.EnglishImageResourceData()+ MoveNext()
        /_/src/libraries/System.Linq/src/System/Linq/Select.cs(136,0): at System.Linq.Enumerable.SelectEnumerableIterator'2.MoveNext()
        ----- Trilha da Pilha Interna -----
        /_/src/libraries/System.Drawing.Common/src/System/Drawing/LibraryResolver.cs(31,0): em System.Drawing.LibraryResolver.EnsureRegistered()
        /_/src/libraries/System.Drawing.Common/src/System/Drawing/GdiplusNative.Unix.cs(65,0): at System.Drawing.SafeNativeMethods.Gdip.PlatformInitialize()
        /_/src/libraries/System.Drawing.Common/src/System/Drawing/Gdiplus.cs(27,0): em System.Drawing.SafeNativeMethods.Gdip.. cctor()

Referência de erro:

Problemas com marcas d'água do .NET Core em imagens do Linux
https://www.itsvse.com/thread-9605-1-1.html

Para processamento de imagens multiplataforma, a documentação oficial da Microsoft recomenda o uso das seguintes bibliotecas:

  • ImageSharp
  • SkiaSharp
  • Microsoft.Maui.Graphics

Referência:O login do hiperlink está visível.

Este artigo utiliza a biblioteca SkiaSharp para gerar CAPTCHA gráfico,SkiaSharp é uma API gráfica 2D multiplataforma para a plataforma .NET baseada na biblioteca gráfica Skia (skia.org) do Google.。 Ele oferece uma API 2D abrangente que pode ser usada em modelos móveis, servidores e desktop para renderizar imagens.

Endereço:O login do hiperlink está visível.

Primeiro, crie um novo projeto e referência ASP.NET Core 6SkiaSharpAs bibliotecas relevantes são as seguintes:

Note que, se o projeto precisar ser implantado em um sistema Linux, referências são necessáriasSkiaSharp.NativeAssets.LinuxClasse, caso contrário o erro será o seguinte:

03 de abr. 18:51:06 raspberrypi dotnet[6203]: fail: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1]
03 de abr. 18:51:06 raspberrypi dotnet[6203]: Uma exceção não tratada ocorreu durante a execução da solicitação.
03 de abr. 18:51:06 raspberrypi dotnet[6203]: System.TypeInitializationException: O inicializador de tipo para 'SkiaSharp.SKImageInfo' lançou uma exceção.
03 de abr. 18:51:06 raspberrypi dotnet[6203]: ---> System.DllNotFoundException: Não é possível carregar a biblioteca compartilhada 'libSkiaSharp' ou uma de suas dependências. Para ajudar a diagnosticar problemas de carregamento, considere definir a variável de ambiente LD_DEBUG: liblibSkiaSharp: cannot can open shared object file: No such file or directory
03 de abr. 18:51:06 raspberrypi dotnet[6203]: em SkiaSharp.SkiaApi.sk_colortype_get_default_8888()
03 de abr. 18:51:06 raspberrypi dotnet[6203]: em SkiaSharp.SKImageInfo:. cctor()
03 de abr. 18:51:06 raspberrypi dotnet[6203]: --- Fim do traço interno da pilha de exceções ---
03 de abr. 18:51:06 raspberrypi dotnet[6203]: em HomeCloud.ImageCaptcha.GetCaptcha(String captchaText, Int32 width, Int32 height, Int32 lineNum, Int32 lineStrookeWidth) em C: \Users\itsvse_pc\source\repos\ConsoleApp1\HomeCloud\ImageCaptcha.cs:linha 184
03 de abr. 18:51:06 raspberrypi dotnet[6203]: em HomeCloud.Controllers.HomeController.Test() em C:\Users\itsvse_pc\source\repos\ConsoleApp1\HomeCloud\Controllers\HomeController.cs :linha 80
03 de abr. 18:51:06 raspberrypi dotnet[6203]: às lambda_method34(Fechamento, Objeto, Objeto[] )

Para considerar que algumas fontes de fonte podem estar ausentes em sistemas diferentes, resultando na impossibilidade de exibir normalmente as informações do código de verificação, precisamos copiar manualmente as fontes para o projeto, criar uma nova pasta de fontes no projeto e copiar as fontes para ela, como mostrado na figura abaixo:



A configuração é a seguinte:

De acordo com os materiais de referência na Internet, o código gráfico de verificação gerado pelo teste é o seguinte:



O CAPTCHA gerado tem duas desvantagens:O CAPTCHA é todo preto (facilmente reconhecido pelo OCR), e as letras CAPTCHA estão agrupadas sem espaçamentoPara resolver esses dois problemas, otimizei o código da seguinte forma:

O código do controlador do HomeController é o seguinte:

As renderizações finais são as seguintes:


Por fim, anexe o arquivo de fonte:

Turistas, se quiserem ver o conteúdo oculto deste post, por favorResposta


(Fim)




Anterior:[Virar]. NET 6 Nova Funcionalidade Enumerable.Chunk()
Próximo:O Angular impede o disparo do evento de clique dos pais
 Senhorio| Postado em 2022-4-4 12:28:35 |
revisar

ASP.NET Core (XIII) para determinar se é uma requisição Ajax ou não
https://www.itsvse.com/thread-10284-1-1.html

ASP.NET Core (doze) front-end JS, agrupamento e compressão de CSS
https://www.itsvse.com/thread-10282-1-1.html

ASP.NET rota de endpoint Core (XI) adiciona middleware para exibir todos os serviços DI
https://www.itsvse.com/thread-10269-1-1.html

ASP.NET Explicação detalhada das prioridades de configuração no Core(10).
https://www.itsvse.com/thread-10265-1-1.html

ASP.NET Explicação detalhada do middleware Middleware do Core (9).
https://www.itsvse.com/thread-9647-1-1.html

ASP.NET Explicação detalhada do Middleware Core
https://www.itsvse.com/thread-8126-1-1.html

ASP.NET dos parâmetros padrão da interface Swagger no Core(8).
https://www.itsvse.com/thread-9640-1-1.html

ASP.NET Core (7) Análise aprofundada do código-fonte do framework
https://www.itsvse.com/thread-9601-1-1.html

ASP.NET Core (VI) DI obtém manualmente o método de injeção de objetos
https://www.itsvse.com/thread-9595-1-1.html

ASP.NET Core (cinco) é baseado em transações distribuídas CAP
https://www.itsvse.com/thread-9593-1-1.html

ASP.NET Validação unificada do modelo ModelState do filtro Core(4)
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET Core (iii) Criar instâncias dinamicamente usando ActivatorUtilities
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET Núcleo (2) Reiniciar a aplicação por código
https://www.itsvse.com/thread-9480-1-1.html

ASP.NET Core (1) usa cache Redis
https://www.itsvse.com/thread-9393-1-1.html
Postado em 2022-4-4 15:02:24 |
Aprenda a aprender
Postado em 2022-4-13 08:58:42 |
Isso é bom, eu gosto. Obrigado por compartilhar!
Postado em 2022-4-14 09:46:41 |
Aprenda como funciona o grandão, obrigado por compartilhar
Postado em 05-08-2022 às 16:25:05 |
O chefe trabalhou duro
 Senhorio| Postado em 25-11-2024 às 10:33:43 |
SixLabors.ImageSharp também é uma ótima biblioteca para processamento de imagens multiplataforma
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com