이미지에 텍스트 추가

이미지에 텍스트를 쓰는 .NET API 솔루션

 

Aspose.Font for .NET은 .NET 애플리케이션에서 글꼴을 사용하는 개발자를 위한 포괄적인 솔루션입니다. 다양한 목적으로 글꼴 로드, 편집, 변환 및 사용과 같은 작업을 단순화합니다. 그러한 목적 중 하나는 텍스트 렌더링입니다. 이 솔루션은 커닝을 고려하고 배경색, 텍스트 색상 및 텍스트 크기와 같은 다양한 측면에 대한 제어를 제공하여 특정 글꼴을 사용하여 이미지에 텍스트를 렌더링하는 사용자 지정 방법을 제공합니다.

다양한 목적에 맞게 이미지에 텍스트를 추가하는 것이 유용한 기능인 앱이 많이 있습니다. 다음은 몇 가지 카테고리입니다.

  • 사진 편집 앱 - Canva, Adobe Express, PicLab과 같은 사진을 다양한 방법으로 편집할 수 있으며, 텍스트 추가가 핵심 기능입니다.
  • 소셜 미디어 앱 - Instagram, Facebook 등에는 사진용 텍스트 편집 도구가 내장되어 있습니다. 이를 통해 공유하기 전에 앱 내에서 직접 캡션, 인용문 또는 기타 메시지를 추가할 수 있습니다.
  • 전단지, 포스터, 프리젠테이션과 같은 보다 복잡한 디자인을 만드는 경우 Photoshop 또는 GIMP와 같은 그래픽 디자인 앱이 고급 텍스트 편집 기능을 제공합니다. 이를 통해 텍스트 배치, 서식 및 효과를 정밀하게 제어할 수 있습니다.
  • 밈 문화는 이미지 위의 유머를 기반으로 번창합니다. Imgflip 또는 Meme Generator와 같은 밈 생성 앱은 재미 있거나 캡션이 있는 이미지를 만들기 위해 설계된 템플릿과 편집 도구를 제공합니다.
  • 마케팅 캠페인을 위해 눈길을 끄는 시각적 요소를 만들려면 이미지에 텍스트를 추가해야 하는 경우가 많습니다. Spark Post 또는 Stencil과 같은 마케팅 및 광고 도구를 사용하면 텍스트를 효과적으로 통합하는 소셜 미디어 게시물, 전단지 또는 광고를 디자인할 수 있습니다.
  • 교육용 앱 - 이미지의 텍스트를 사용하여 인포그래픽, 학습 가이드 또는 기타 시각적 학습 자료를 만듭니다.

이미지에 컨텍스트 추가, 사용자의 관심 끌기, 메시지 생성 등 이미지에 텍스트를 추가하는 데에는 여러 가지 이유가 있습니다. Aspose.Font를 사용하면 이 기능을 C# 코드 기반 앱에 쉽게 구현할 수 있습니다.

예제를 실행하려면 다음이 필요합니다.

  • Aspose.Font for .NET API는 기능이 풍부하고 강력하며 사용하기 쉬운 C# 플랫폼용 문서 조작 및 변환 API입니다.

  • NuGet 패키지 관리자를 열고 Aspose.Font를 검색하여 설치하세요. 패키지 관리자 콘솔에서 다음 명령을 사용할 수도 있습니다.

Package Manager Console Command


    PM> Install-Package Aspose.Font

이미지에 텍스트를 표시하는 단계 C#:

제공된 코드 조각은 다양한 인수를 사용하여 지정된 글꼴을 사용하여 비트맵에 텍스트를 렌더링하는 CustomDrawText라는 함수를 정의합니다. 기능에 대한 분석은 다음과 같습니다.

  1. 글꼴 내의 특정 문자 모양을 나타내기 위해 Glyphs의 ID를 검색합니다.
  2. 출력 비트맵의 해상도를 설정합니다.
  3. 제공된 브러시로 비트맵의 배경을 채웁니다.
  4. 보다 부드러운 텍스트 렌더링을 위해 앤티앨리어싱을 설정하고 문자 위치 지정을 위한 변수를 초기화합니다.
  5. 렌더러를 사용하여 지정된 글리프를 사용하여 텍스트를 렌더링합니다.
  6. 그려진 텍스트가 포함된 최종 비트맵을 지정된 파일에 저장합니다.

C# 이미지에 텍스트를 쓰는 코드

    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. 어떤 종류의 이미지를 사용하여 텍스트를 쓸 수 있나요?

API는 선명한 고해상도 이미지에서 가장 잘 작동합니다. 흐린 사진이나 복잡한 배경이 있는 이미지는 텍스트 배치의 정확성에 영향을 미칠 수 있으므로 피하십시오.

2. 텍스트 글꼴과 스타일을 사용자 정의할 수 있나요?

예, Aspose.Font를 사용하면 텍스트 오버레이에 대한 글꼴 스타일, 크기 및 색상까지 지정할 수 있습니다. 예를 들어 텍스트를 압축, 늘리기, 회전하려는 경우 텍스트의 사용자 정의 출력을 제공합니다. 각도든 뭐든.

3. API는 텍스트 배치를 어떻게 처리합니까?

가운데 또는 아래쪽 정렬과 같은 사전 정의된 배치를 제공하지만 GlyphOutlineRenderer 클래스RenderGlyph() 메서드 중 하나를 사용하여 텍스트를 이미지로 변환하는 고급(사용자 정의) 방법도 제공합니다.