Adicione o texto a uma imagem

Solução API .NET para escrever texto em imagens

 

Aspose.Font for .NET é uma solução abrangente para desenvolvedores que trabalham com fontes em seus aplicativos .NET. Ele simplifica tarefas como carregar, editar, converter e usar fontes para diversos fins. Um desses propósitos é a renderização de texto. A solução fornece uma maneira personalizada de renderizar texto em uma imagem usando uma fonte específica, considerando o kerning e oferecendo controle sobre vários aspectos, como cor de fundo, cor do texto e tamanho do texto.

Existem muitos aplicativos onde adicionar texto a imagens é uma funcionalidade útil, atendendo a diversos propósitos. Aqui estão algumas categorias:

  • Aplicativos de edição de fotos - como Canva, Adobe Express e PicLab permitem editar fotos de várias maneiras, e adicionar texto é um recurso essencial.
  • Aplicativos de mídia social - como Instagram e Facebook possuem ferramentas integradas de edição de texto para fotos. Isso permite adicionar legendas, citações ou outras mensagens diretamente no aplicativo antes de compartilhar.
  • Se você estiver criando designs mais complexos, como folhetos, pôsteres ou apresentações, aplicativos de design gráfico como Photoshop ou GIMP oferecem recursos avançados de edição de texto. Eles permitem um controle preciso sobre o posicionamento, formatação e efeitos do texto.
  • A cultura meme prospera com o humor do texto na imagem. aplicativos de criação de memes como Imgflip ou Meme Generator fornecem modelos e ferramentas de edição projetados para criar imagens engraçadas ou legendadas.
  • A criação de recursos visuais atraentes para campanhas de marketing geralmente envolve adicionar texto às imagens. Ferramentas de marketing e publicidade como Spark Post ou Stencil permitem que você crie postagens, folhetos ou anúncios em mídias sociais que incorporem texto de maneira eficaz.
  • Aplicativos educacionais: use texto em imagens para criar infográficos, guias de estudo ou outros materiais visuais de aprendizagem.

Há muitos motivos para adicionar texto a imagens, como adicionar contexto a uma imagem, chamar a atenção do usuário, criar uma mensagem, etc. Com Aspose.Font, essa funcionalidade pode ser facilmente implementada em seus aplicativos baseados em código C#.

Para executar os exemplos que você precisa:

  • Aspose.Font for .NET API, que é uma API de conversão e manipulação de documentos rica em recursos, poderosa e fácil de usar para a plataforma C#.

  • Abra o gerenciador de pacotes NuGet, procure Aspose.Font e instale. Você também pode usar o seguinte comando do Console do Gerenciador de Pacotes.

Package Manager Console Command


    PM> Install-Package Aspose.Font

Etapas para exibir texto em imagens C#:

O trecho de código fornecido define uma função chamada CustomDrawText que usa vários argumentos para renderizar texto em um bitmap usando uma fonte especificada. Aqui está um detalhamento da funcionalidade:

  1. Recupere os IDs dos glifos para representar um formato de caractere específico na fonte.
  2. Defina a resolução do bitmap de saída.
  3. Preencha o fundo do bitmap com o pincel fornecido.
  4. Defina o anti-aliasing para uma renderização de texto mais suave e inicialize variáveis ​​para posicionamento de glifos.
  5. Renderize textos usando os glifos especificados usando o renderizador.
  6. Salve o bitmap final com o texto desenhado no arquivo especificado.

Código C# para escrever texto em imagens

    public static void CustomDrawText(string text, IFont font, double fontSize, Brush backgroundBrush, Brush textBrush, string outFile, Bitmap bitmap, double kerningCoefficient = 1, double coordinateX = 0, double coordinateY = 0)
    {
        //Get glyph identifiers for every symbol in the text line
        GlyphId[] gids = new GlyphId[text.Length];

        for (int i = 0; i < text.Length; i++)
            gids[i] = font.Encoding.DecodeToGid(text[i]);

        // Set common drawing settings
        double dpi = 300;
        double resolutionCorrection = dpi / 72; // 72 is font's internal dpi

        // Prepare the output bitmap                
        Bitmap outBitmap = bitmap;

        outBitmap.SetResolution((float)dpi, (float)dpi);

        Graphics outGraphics = Graphics.FromImage(outBitmap);
        outGraphics.FillRectangle(backgroundBrush, 0, 0, outBitmap.Width, outBitmap.Height);
        outGraphics.SmoothingMode = SmoothingMode.HighQuality;

        //Declare coordinate variables and the previous gid
        GlyphId previousGid = null;
        double glyphXCoordinate = coordinateX;
        double glyphYCoordinate = coordinateY;

        glyphYCoordinate += fontSize * resolutionCorrection;

        //The loop paints every glyph in gids
        foreach (GlyphId gid in gids)
        {
            // if the font contains the gid
            if (gid != null)
            {
                Glyph glyph = font.GlyphAccessor.GetGlyphById(gid);
                if (glyph == null)
                    continue;

                // The path that accepts drawing instructions
                GraphicsPath path = new GraphicsPath();

                // Create the IGlyphOutlinePainter implementation
                GlyphOutlinePainter outlinePainter = new GlyphOutlinePainter(path);

                // Create the renderer
                Aspose.Font.Renderers.IGlyphRenderer renderer = new Aspose.Font.Renderers.GlyphOutlineRenderer(outlinePainter);

                // Get common glyph properties
                double kerning = 0;

                // Get the kerning value

                if (previousGid != null)
                {
                    kerning = (font.Metrics.GetKerningValue(previousGid, gid) / glyph.SourceResolution) * fontSize * resolutionCorrection;
                    kerning += FontWidthToImageWith(font.Metrics.GetGlyphWidth(previousGid), glyph.SourceResolution, fontSize);
                }

                // Glyph positioning - increase the glyph X coordinate according to the kerning distance
                glyphXCoordinate += kerning * kerningCoefficient;

                // Glyph placement matrix
                TransformationMatrix glyphMatrix = new TransformationMatrix(
                        new double[]
                                { fontSize * resolutionCorrection,
                            0,
                            0,
                        // negative because of the bitmap coordinate system begins from the top
                            - fontSize*resolutionCorrection,
                            glyphXCoordinate,
                            glyphYCoordinate
                                });

                // Render the current glyph
                renderer.RenderGlyph(font, gid, glyphMatrix);

                // Fill the path
                path.FillMode = FillMode.Winding;

                outGraphics.FillPath(textBrush, path);
            }

            //Set the current gid as previous to get the correct kerning for the next glyph
            previousGid = gid;
        }

        //Save the results
        outBitmap.Save(outFile);
    }



FAQ

1. Que tipo de imagens posso usar para escrever texto?

As APIs funcionam melhor com imagens nítidas e de alta resolução. Evite fotos borradas ou imagens com fundos complexos, pois podem afetar a precisão do posicionamento do texto.

2. Posso personalizar a fonte e o estilo do texto?

Sim, Aspose.Font permite especificar estilos de fonte, tamanhos e até cores para sua sobreposição de texto. Ele oferece uma saída personalizada do texto, por exemplo, quando você deseja compactar, esticar, girar o texto em um ângulo ou outra coisa.

3. Como a API lida com o posicionamento do texto?

Ele oferece posicionamentos predefinidos, como alinhamento central ou inferior, mas também oferece uma maneira mais avançada (personalizada) de converter texto em uma imagem usando um dos métodos RenderGlyph() da classe GlyphOutlineRenderer.