Thêm văn bản vào hình ảnh

Giải pháp .NET API viết chữ lên hình ảnh

 

Aspose.Font for .NET là một giải pháp toàn diện dành cho các nhà phát triển làm việc với phông chữ trong ứng dụng .NET của họ. Nó đơn giản hóa các tác vụ như tải, chỉnh sửa, chuyển đổi và sử dụng phông chữ cho các mục đích khác nhau. Một mục đích như vậy là hiển thị văn bản. Giải pháp này cung cấp một cách tùy chỉnh để hiển thị văn bản trên hình ảnh bằng cách sử dụng một phông chữ cụ thể, xem xét kerning và cung cấp khả năng kiểm soát các khía cạnh khác nhau như màu nền, màu văn bản và kích thước văn bản.

Có nhiều ứng dụng trong đó việc thêm văn bản vào hình ảnh là một chức năng hữu ích, phục vụ cho nhiều mục đích khác nhau. Dưới đây là một số loại:

  • Ứng dụng chỉnh sửa ảnh - như Canva, Adobe Express và PicLab cho phép bạn chỉnh sửa ảnh theo nhiều cách khác nhau và thêm văn bản là tính năng cốt lõi.
  • Ứng dụng mạng xã hội - như Instagram và Facebook có các công cụ chỉnh sửa văn bản tích hợp cho ảnh. Điều này cho phép bạn thêm chú thích, trích dẫn hoặc tin nhắn khác trực tiếp trong ứng dụng trước khi chia sẻ.
  • Nếu bạn đang tạo các thiết kế phức tạp hơn như tờ rơi, áp phích hoặc bản trình bày, ứng dụng thiết kế đồ họa như Photoshop hoặc GIMP sẽ cung cấp các tính năng chỉnh sửa văn bản nâng cao. Những điều này cho phép kiểm soát chính xác vị trí, định dạng và hiệu ứng văn bản.
  • Văn hóa Meme phát triển nhờ sự hài hước bằng văn bản trên hình ảnh. ứng dụng tạo meme như Imgflip hoặc Meme Generator cung cấp các mẫu và công cụ chỉnh sửa được thiết kế để tạo hình ảnh hài hước hoặc có chú thích.
  • Tạo hình ảnh bắt mắt cho chiến dịch tiếp thị thường liên quan đến việc thêm văn bản vào hình ảnh. Các công cụ tiếp thị và quảng cáo như Spark Post hoặc Macintosh cho phép bạn thiết kế các bài đăng, tờ rơi hoặc quảng cáo trên mạng xã hội kết hợp văn bản một cách hiệu quả.
  • Ứng dụng giáo dục - sử dụng văn bản trên hình ảnh để tạo đồ họa thông tin, hướng dẫn học tập hoặc tài liệu học tập trực quan khác.

Có nhiều lý do để thêm văn bản vào hình ảnh, như thêm ngữ cảnh vào hình ảnh, thu hút sự chú ý của người dùng, tạo thông báo, v.v. Với Aspose.Font, chức năng này có thể được triển khai dễ dàng vào các ứng dụng dựa trên mã C# của bạn.

Để chạy các ví dụ bạn cần:

  • Aspose.Font for .NET API là một API chuyển đổi và xử lý tài liệu giàu tính năng, mạnh mẽ và dễ sử dụng cho nền tảng C#.

  • Mở trình quản lý gói NuGet và tìm kiếm Aspose.Font và cài đặt. Bạn cũng có thể sử dụng lệnh sau từ Bảng điều khiển quản lý gói.

Package Manager Console Command


    PM> Install-Package Aspose.Font

Các bước hiển thị chữ trên ảnh C#:

Đoạn mã được cung cấp xác định một hàm có tên CustomDrawText có nhiều đối số khác nhau để hiển thị văn bản trên bitmap bằng phông chữ được chỉ định. Đây là bảng phân tích chức năng:

  1. Truy xuất ID của Glyph để thể hiện hình dạng ký tự cụ thể trong phông chữ.
  2. Đặt độ phân giải của bitmap đầu ra.
  3. Tô nền của bitmap bằng cọ được cung cấp.
  4. Đặt tính năng khử răng cưa để hiển thị văn bản mượt mà hơn và khởi tạo các biến để định vị hình tượng.
  5. Kết xuất văn bản bằng cách sử dụng glyphs được chỉ định bằng trình kết xuất.
  6. Lưu bitmap cuối cùng với văn bản đã vẽ vào tệp được chỉ định.

Code C# viết chữ lên ảnh

    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. Tôi có thể sử dụng loại hình ảnh nào để viết văn bản lên đó?

API hoạt động tốt nhất với hình ảnh rõ ràng, có độ phân giải cao. Tránh ảnh mờ hoặc hình ảnh có nền phức tạp vì những điều này có thể ảnh hưởng đến độ chính xác của vị trí văn bản.

2. Tôi có thể tùy chỉnh phông chữ và kiểu văn bản không?

Có, Aspose.Font cho phép bạn chỉ định kiểu phông chữ, kích thước và thậm chí cả màu sắc cho lớp phủ văn bản của mình. Nó cung cấp đầu ra tùy chỉnh của văn bản, ví dụ: khi bạn muốn nén, kéo giãn, xoay văn bản theo hướng góc độ, hoặc cái gì đó khác.

3. API xử lý vị trí văn bản như thế nào?

Nó cung cấp các vị trí được xác định trước như căn giữa hoặc dưới cùng nhưng nó cũng cung cấp một cách (tùy chỉnh) nâng cao hơn để chuyển đổi văn bản thành hình ảnh bằng cách sử dụng một trong các RenderGlyph() Phương thức của Lớp GlyphOutlineRenderer.