צייר תמונות רסטר וקטור

בין אם אתה בונה אתר אינטרנט, אפליקציה למחשב שולחני או אפליקציה לנייד, היכולת לבצע מניפולציות ולצייר תמונות היא היבט מכריע בעת עיבוד ועריכת תמונות. כדי להעצים מפתחים עם תכונות ציור מתקדמות אך קלות ליישום, אנו מציגים את Aspose.Imaging.Drawing, ממשק API רב עוצמה המיועד ליישומי C# .NET, המציע מגוון תכונות של ציור תמונה.

ספריית ציור C# .NET

Aspose.Imaging.Drawing הוא API חזק המאפשר לך לעבד תמונות רסטר וויקטור בטכניקות עיבוד תמונה מתקדמות. עם גישת בתים מקורית, ה-API מבטיח מהירות עיבוד גבוהה בזמן יצירה או מניפולציה של תמונות. באמצעות ה-API, אתה יכול לצייר אובייקטים עם מניפולציה של פיקסלים ונתיב גרפי ולהמיר תמונות מפורמט אחד לאחר. Aspose.Imaging.Drawing משתמש ב-Aspose.Drawing כמנוע הגרפיקה המוגדר כברירת מחדל, שהוא ספריית גרפיקה דו-ממדית חוצת פלטפורמות המציעה סט שלם של תכונות לציור טקסט, גיאומטריות ותמונות ללא כל תלות חיצונית.

אתה יכול להוריד ולהתקין את Aspose.Imaging.Drawing מ-NuGet.

PM> NuGet\Install-Package Aspose.Imaging.Drawing

כעת נסתכל על כמה מאפיינים בולטים של ממשק API זה של .NET Drawing והשימוש בהם בעזרת קוד מקור.

יצירת גרפיקה באמצעות ספריית ציור .NET

Aspose.Imaging.Drawing מאפשר לך ליצור תמונות על ידי ציור אובייקטים שונים כגון עיגולים, קווים, משולשים, ריבועים ואליפסות. לא רק תמונות הרסטר אלא גם אתה יכול ליצור תמונות וקטוריות באמצעות ה-API. בואו נסתכל על איך לצייר תמונות רסטר וויקטור ב-C# באמצעות ממשק API זה של .NET ציור.

צייר תמונת רסטר

להלן השלבים לציור תמונת רסטר באמצעות API של Aspose.Imaging.Drawing.

  • ראשית, צור תמונה בפורמט הרצוי באמצעות שיטת Image.Create() .
  • לאחר מכן, צור אובייקט בכיתה גרפיקה ואתחול אותו עם Image שיצרנו למעלה.
  • נקה את פני התמונה בשיטת Graphics.Clear.
  • צור עט חדש ואתחול אותו בצבע הרצוי.
  • צייר אליפסה (או כל אובייקט גרפי אחר) באמצעות שיטת Graphics.DrawEllipse() .
  • צייר מצולע באמצעות שיטת Graphics.FillPolygon() .
  • לבסוף, שמור את התמונה באמצעות שיטת Image.Save().

קטע הקוד הבא מראה כיצד לצייר תמונה ב-C#.

string outputFolder = @"Output\";

// צור מופע של BmpOptions והגדר את המאפיינים השונים שלו
BmpOptions imageOptions = new BmpOptions();
imageOptions.BitsPerPixel = 24;

// צור מופע של FileCreateSource והקצה אותו למאפיין Source 
imageOptions.Source = new FileCreateSource(outputFolder + "result.bmp", false);

using (var image = Image.Create(imageOptions, 500, 500))
{
    var graphics = new Graphics(image);

    // נקה את משטח התמונה בצבע לבן וצור ואתחל אובייקט עט עם צבע כחול
    graphics.Clear(Color.White);
    var pen = new Pen(Color.Blue);

    // צייר אליפסה על ידי הגדרת המלבן התוחם של רוחב 150 וגובה 100 צייר גם מצולע באמצעות LinearGradientBrush
    graphics.DrawEllipse(pen, new Rectangle(10, 10, 150, 100));

    using (var linearGradientBrush = new LinearGradientBrush(image.Bounds, Color.Red, Color.White, 45f))
    {
        graphics.FillPolygon(linearGradientBrush, new[] { new Point(200, 200), new Point(400, 200), new Point(250, 350) });
    }

    // שמור תמונה
    image.Save();
}

צייר תמונה וקטורית

בדומה לתמונות רסטר, אתה יכול לצייר גרפיקה וקטורית, כגון SVG, בכמה שלבים פשוטים. בואו ניצור תמונה וקטורית באמצעות ספריית הציור C# שלנו.

  • ראשית, צור אובייקט MemoryStream.
  • לאחר מכן, טען תמונת SVG.
  • רסטר SVG ל-PNG וכתוב את התוצאה לזרם.
  • טען תמונת PNG מהזרם לציור נוסף.
  • צייר תמונת PNG על תמונת SVG קיימת.
  • לבסוף, שמור את התוצאות.

קטע הקוד הבא מראה כיצד לצייר תמונה וקטורית ב-C#.

string templatesFolder = @"Templates\";
string outputFolder = @"Output\";

using (MemoryStream drawnImageStream = new MemoryStream())
{
    // ראשית, רסטר את Svg ל-Png וכתוב את התוצאה לזרם.
    using (SvgImage svgImage = (SvgImage)Image.Load(templatesFolder + "template.svg"))
    {
        SvgRasterizationOptions rasterizationOptions = new SvgRasterizationOptions();
        rasterizationOptions.PageSize = svgImage.Size;

        PngOptions saveOptions = new PngOptions();
        saveOptions.VectorRasterizationOptions = rasterizationOptions;

        svgImage.Save(drawnImageStream, saveOptions);

        // כעת טען תמונת Png מהזרם לציור נוסף.
        drawnImageStream.Seek(0, System.IO.SeekOrigin.Begin);
        using (RasterImage imageToDraw = (RasterImage)Image.Load(drawnImageStream))
        {
            // ציור על תמונת Svg הקיימת.
            Aspose.Imaging.FileFormats.Svg.Graphics.SvgGraphics2D graphics = new Aspose.Imaging.FileFormats.Svg.Graphics.SvgGraphics2D(svgImage);

            // הקטן את כל התמונה המצוירת פי 2 וצייר אותה למרכז משטח הציור.
            int width = imageToDraw.Width / 2;
            int height = imageToDraw.Height / 2;
            Point origin = new Point((svgImage.Width - width) / 2, (svgImage.Height - height) / 2);
            Size size = new Size(width, height);

            graphics.DrawImage(imageToDraw, origin, size);

            // שמור את תמונת התוצאה
            using (SvgImage resultImage = graphics.EndRecording())
            {
                resultImage.Save(outputFolder + "vector_image.svg");
            }
        }
    }
}

החל מיסוך על תמונות

מיסוך בעריכת תמונה מתייחס לטכניקה של הסתרה או חשיפה סלקטיבית של חלקים מסוימים של תמונה. זה כולל יצירת מסכה, שהיא בעצם תמונה בגווני אפור המגדירה את השקיפות או האטימות של כל פיקסל בתמונה המקורית. מיסוך תמונה נהוג באופן נרחב לצורך זיהוי ואבחון.

Aspose.Image.Drawing מספקת שתי שיטות להחלת מיסוך תמונה:

  • מסכה ידנית - היא משתמשת בסט של ROIs בתור המסכה. ה-ROIs עבור כל פרוסה משמשים להגדרת המסכה. זה צריך קלט משתמש נוסף.
  • מיסוך אוטומטי - זה לא דורש הרבה נתוני קלט מהמשתמש אבל אולי לא כל כך מדויק.

כעת נראה כיצד להחיל מיסוך ידני ואוטומטי על תמונות בקוד C#.

מיסוך תמונה ידני

קטע הקוד הבא מראה כיצד להחיל מיסוך ידני על תמונה ב-C#.

string outputFolder = @"Output\";

// קובץ מקור
string sourceFileName = outputFolder + "couple.png";

// צור נתיב גרפי
GraphicsPath manualMask = new GraphicsPath();

// הוסף צורות
Figure firstFigure = new Figure();
firstFigure.AddShape(new EllipseShape(new RectangleF(100, 30, 40, 40)));
firstFigure.AddShape(new RectangleShape(new RectangleF(10, 200, 50, 30)));

// הוסף דמות
manualMask.AddFigure(firstFigure);

GraphicsPath subPath = new GraphicsPath();
Figure secondFigure = new Figure();
secondFigure.AddShape(
    new PolygonShape(
     new PointF[]
     {
        new PointF(310, 100), new PointF(350, 200), new PointF(250, 200)

     }, true));

secondFigure.AddShape(new PieShape(new RectangleF(10, 10, 80, 80), 30, 120));
subPath.AddFigure(secondFigure);
manualMask.AddPath(subPath);

// החל מיסוך
using (RasterImage image = (RasterImage)Image.Load(sourceFileName))
{
    MaskingOptions maskingOptions = new MaskingOptions()
    {
        Method = SegmentationMethod.Manual,
        Args = new ManualMaskingArgs
        {
            Mask = manualMask
        },
        Decompose = false,
        ExportOptions =
      new PngOptions()
      {
          ColorType = PngColorType.TruecolorWithAlpha,
          Source = new StreamSource(new MemoryStream())
      },
    };
    MaskingResult results = new ImageMasking(image).Decompose(maskingOptions);
    // שמירת תוצאת מיסוך סופית.
    using (RasterImage resultImage = (RasterImage)results[1].GetImage())
    {
        resultImage.Save(outputFolder + "manual_masking.png", new PngOptions() { ColorType = PngColorType.TruecolorWithAlpha });
    }
}

מיסוך תמונה אוטומטי

קטע הקוד שלהלן מחיל מיסוך אוטומטי על תמונה באמצעות .NET drawing API.

string outputFolder = @"Output\";

MaskingResult results;
using (RasterImage image = (RasterImage)Image.Load(outputFolder + "couple.jpg"))
{
    // כדי להשתמש ב-Graph Cut עם משיכות מחושבות אוטומטיות, נעשה שימוש ב-AutoMaskingGraphCutOptions.
    AutoMaskingGraphCutOptions options = new AutoMaskingGraphCutOptions
    {
        // מציין כי יש לבצע חישוב חדש של משיכות ברירת המחדל במהלך פירוק התמונה.
        CalculateDefaultStrokes = true,
        
        // הגדרת רדיוס נוצות לאחר תהליך בהתבסס על גודל התמונה.
        FeatheringRadius = (Math.Max(image.Width, image.Height) / 500) + 1,
        Method = SegmentationMethod.GraphCut,
        Decompose = false,
        ExportOptions =
            new PngOptions()
            {
                ColorType = PngColorType.TruecolorWithAlpha,
                Source = new FileCreateSource(outputFolder + "auto_masking.png")
            },
        BackgroundReplacementColor = Color.Transparent
    };

    results = new ImageMasking(image).Decompose(options);

    using (RasterImage resultImage = (RasterImage)results[1].GetImage())
    {
        resultImage.Save(outputFolder + "auto_masking_2.png", new PngOptions() { ColorType = PngColorType.TruecolorWithAlpha });
    }
}

החל מסננים על תמונות

החלת מסננים על תמונות משרתת מטרות שונות, ואנשים משתמשים בהם מסיבות שונות, הן מעשיות והן אמנותיות. השימושים הנפוצים ביותר במסנני תמונה כוללים תיקון צבע, שיפור איכות התמונה, החלת אפקטים מיוחדים, הפחתת רעשים וכדומה. Aspose.Imaging.Drawing תומך במספר סוגים של פילטרים שניתן להחיל על התמונות, כגון חציון, motion weiner, gauss weiner וכו'.

להדגמה, עיין בקוד הבא המחיל את המסנן החציוני על תמונה באמצעות Aspose.Imaging.Drawing.

string templatesFolder = @"Templates\";
string outputFolder = @"Output\";

// טען את התמונה הרועשת 
using (Image image = Image.Load(templatesFolder + "template.gif"))
{
    // העבר את התמונה לתוך RasterImage
    RasterImage rasterImage = image as RasterImage;
    if (rasterImage == null)
    {
        return;
    }

    // צור מופע של המחלקה MedianFilterOptions והגדר את הגודל, החל מסנן MedianFilterOptions על אובייקט RasterImage ושמור את התמונה שנוצרה
    MedianFilterOptions options = new MedianFilterOptions(4);
    rasterImage.Filter(image.Bounds, options);

    // שמור תמונה
    image.Save(outputFolder + "median_filter.gif");
}

חתוך, סובב ושנה גודל תמונות

חיתוך, סיבוב ושינוי גודל של תמונות נחשבות לתכונות החיוניות של יישומי עריכת תמונות. הן פעולות עיבוד התמונה הנפוצות ביותר המשמשות לעיבוד תמונות דיגיטליות. בואו נסתכל כיצד לחתוך, לסובב ולשנות את הגודל של תמונות באמצעות API של Aspose.Imaging.Drawing.

חתוך תמונה

כדי לחתוך תמונה, עליך לספק את ערכי ההסטה עבור כל ארבעת הצדדים של התמונה. בהתבסס על ערכים אלה, גבולות התמונה מוזזים לכיוון מרכז התמונה. קטע הקוד הבא של C# חותך תמונה על סמך ערכי ההיסט שסופקו.

string templatesFolder = @"Templates\";
string outputFolder = @"Output\";

// טען תמונה קיימת למופע של מחלקה RasterImage
using (RasterImage rasterImage = (RasterImage)Image.Load(templatesFolder + "template.jpg"))
{
    // לפני החיתוך, יש לשמור את התמונה במטמון לביצועים טובים יותר
    if (!rasterImage.IsCached)
    {
        rasterImage.CacheData();
    }

    // הגדר ערכי שינוי עבור כל ארבעת הצדדים
    int leftShift = 10;
    int rightShift = 10;
    int topShift = 10;
    int bottomShift = 10;

    // בהתבסס על ערכי ההסטה, החל את שיטת החיתוך בתמונה שיטת החיתוך תעביר את גבולות התמונה לכיוון מרכז התמונה ותשמור את התוצאות בדיסק
    rasterImage.Crop(leftShift, rightShift, topShift, bottomShift);

    // שמור תמונה חתוכה
    rasterImage.Save(outputFolder + "cropped_image.jpg");
}

סובב תמונה

כדי לסובב תמונה, Aspose.Imaging.Drawing מספקת את שיטת RotateFlip, אשר לא רק מסובבת תמונה אלא גם הופכת אותה (במידת הצורך). אתה יכול לבחור את אפשרות הסיבוב וההיפוך הרצויים מתוך RotateFlipType enum. קטע הקוד הבא מראה כיצד לסובב תמונה אך לא להפוך אותה ב-C#.

string templatesFolder = @"Templates\";
string outputFolder = @"Output\";

// טעינה וסיבוב תמונה
using (var image = Image.Load(templatesFolder + "template.jpg"))
{
    // סובב תמונה
    image.RotateFlip(RotateFlipType.Rotate270FlipNone);

    // שמור תמונה
    image.Save(outputFolder + "rotated_image.jpg");
}

שנה גודל תמונה

שינוי גודל תמונה באמצעות Aspose.Imaging.Drawing הוא פשוט כמו עוגה. פשוט התקשר לשיטת שינוי גודל והעביר את ערכי הגובה והרוחב החדשים. קטע הקוד הבא מראה כיצד לשנות גודל תמונה ב-C#.

string templatesFolder = @"Templates\";
string outputFolder = @"Output\";

using (Image image = Image.Load(templatesFolder + "template.jpg"))
{
    // שנה את גודל התמונה
    image.Resize(300, 300);

    // שמור תמונה
    image.Save(outputFolder + "resized_image.jpg");
}   

המרת תמונות לפורמטים אחרים

כדי להמיר תמונה באמצעות Aspose.Imaging.Drawing API, אתה רק צריך לטעון את התמונה ולשמור אותה בפורמט הפלט הרצוי. קטע הקוד הבא ממיר תמונת JPG לפורמטים של WebP, PSD, PDF ו-TIFF.

string templatesFolder = @"Templates\";
string outputFolder = @"Output\";

using (var img = Aspose.Imaging.Image.Load(templatesFolder + "template.jpg"))
{
    // שמור בפורמטים שונים של תמונה
    img.Save(outputFolder + "output.webp", new Aspose.Imaging.ImageOptions.WebPOptions());
    img.Save(outputFolder + "output.psd ", new Aspose.Imaging.ImageOptions.PsdOptions());
    img.Save(outputFolder + "output.tiff", new Aspose.Imaging.ImageOptions.TiffOptions(TiffExpectedFormat.Default));

    // שמור כ-PDF
    PdfOptions exportOptions = new PdfOptions();
    exportOptions.PdfDocumentInfo = new Aspose.Imaging.FileFormats.Pdf.PdfDocumentInfo();
    img.Save(outputFolder + "output.pdf", exportOptions);
}

קבל רישיון API בחינם

אם ברצונך להעריך את ה-API של Aspose.Imaging.Drawing, אתה יכול לקבל רישיון זמני ללא תשלום המאפשר לך להשתמש ב-API במלוא הקיבולת שלו ללא כל הגבלה.

סיכום

בתחום הגרפיקה ועיבוד התמונה, ה-API של Aspose.Imaging.Drawing בולט ככלי רב תכליתי וחזק עבור מפתחי C# .NET. בין אם אתה מחפש לשפר אלמנטים חזותיים, לתקן עיוותים של תמונה או להמיר תמונות בין פורמטים, ממשק API זה מספק סט מקיף של תכונות. עם Aspose.Imaging.Drawing, מניפולציה של תמונה מגיעה בקצות אצבעותיך, ומעצימה אותך ליצור גרפיקה משכנעת ומדהימה מבחינה חזותית באופן תוכנתי.

הודע לנו על המשוב או השאילתות שלך בפורום שלנו.