أضف النص إلى الصورة

.NET API Solution لكتابة النص على الصور

 

يعد 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#.

  • افتح مدير الحزم NuGet، وابحث عن Aspose.Font وقم بتثبيته. يمكنك أيضًا استخدام الأمر التالي من وحدة تحكم إدارة الحزم.

Package Manager Console Command


    PM> Install-Package Aspose.Font

خطوات عرض النص على الصور C#:

يحدد مقتطف التعليمات البرمجية المقدم وظيفة تسمى CustomDrawText والتي تأخذ وسائط مختلفة لعرض النص على صورة نقطية باستخدام خط محدد. فيما يلي تفاصيل الوظيفة:

  1. قم باسترجاع معرفات الحروف الرسومية لتمثيل شكل حرف معين داخل الخط.
  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. ما نوع الصور التي يمكنني استخدامها لكتابة نص عليها؟

تعمل واجهات برمجة التطبيقات (APIs) بشكل أفضل مع الصور الواضحة وعالية الدقة. تجنب الصور الباهتة أو الصور ذات الخلفيات المعقدة، حيث يمكن أن تؤثر هذه الصور على دقة موضع النص.

2. هل يمكنني تخصيص خط النص ونمطه؟

نعم، يتيح لك Aspose.Font تحديد أنماط الخطوط وأحجامها وحتى الألوان لتراكب النص الخاص بك. فهو يوفر مخرجات مخصصة للنص، على سبيل المثال، عندما تريد ضغط النص أو تمديده أو تدويره بمعدل الزاوية أو أي شيء آخر.

3. كيف تتعامل واجهة برمجة التطبيقات (API) مع موضع النص؟

إنه يوفر مواضع محددة مسبقًا مثل محاذاة الوسط أو الأسفل ولكنه يوفر أيضًا طريقة أكثر تقدمًا (مخصصة) لتحويل النص إلى صورة باستخدام إحدى طرق RenderGlyph() الخاصة بـ GlyphOutlineRenderer Class.