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:
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:
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 favor Resposta
(Fim)
|