ترسیم تصاویر شطرنجی و برداری

چه در حال ساخت یک وب سایت، یک برنامه دسکتاپ یا یک برنامه تلفن همراه باشید، توانایی دستکاری و طراحی روی تصاویر یک جنبه مهم در پردازش و ویرایش تصاویر است. برای توانمندسازی توسعه‌دهندگان با ویژگی‌های طراحی پیشرفته و در عین حال آسان برای پیاده‌سازی، Aspose.Imaging.Drawing را معرفی می‌کنیم، یک API قدرتمند که برای برنامه‌های 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 Library

Aspose.Imaging.Drawing به شما این امکان را می دهد که با رسم اشیاء مختلف مانند دایره، خطوط، مثلث، مربع و بیضی تصاویر ایجاد کنید. نه تنها تصاویر شطرنجی، بلکه می توانید تصاویر برداری را با استفاده از API تولید کنید. بیایید نگاهی به نحوه رسم تصاویر شطرنجی و برداری در سی شارپ با استفاده از این API طراحی دات نت بیندازیم.

رسم تصویر شطرنجی

در زیر مراحل ترسیم یک تصویر شطرنجی با استفاده از Aspose.Imaging.Drawing API آورده شده است.

  • ابتدا با استفاده از متد Image.Create یک تصویر با فرمت مورد نظر ایجاد کنید.
  • سپس یک شی از کلاس Graphics ایجاد کنید و با Image که در بالا ایجاد کردیم مقداردهی اولیه کنید.
  • با استفاده از روش Graphics.Clear سطح تصویر را پاک کنید.
  • یک قلم جدید ایجاد کنید و آن را با رنگ دلخواه مقداردهی کنید.
  • با استفاده از متد Graphics.DrawEllipse () یک بیضی (یا هر شی گرافیکی دیگری) بکشید.
  • با استفاده از متد Graphics.FillPolygon() یک چند ضلعی رسم کنید.
  • در نهایت با استفاده از متد Image.Save() تصویر را ذخیره کنید.

قطعه کد زیر نحوه رسم تصویر در سی شارپ را نشان می دهد.

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);

    // سطح تصویر را با رنگ سفید پاک کنید و یک شی Pen را با رنگ آبی ایجاد و مقداردهی اولیه کنید
    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 را در چند مرحله ساده ترسیم کنید. بیایید با استفاده از کتابخانه طراحی سی شارپ خود یک تصویر برداری ایجاد کنیم.

  • ابتدا یک شی MemoryStream ایجاد کنید.
  • سپس، یک تصویر SVG را بارگذاری کنید.
  • SVG را به PNG Rasterize کنید و نتیجه را در یک جریان بنویسید.
  • برای ترسیم بیشتر یک تصویر PNG از جریان بارگیری کنید.
  • تصویر PNG را روی تصویر SVG موجود بکشید.
  • در نهایت، نتایج را ذخیره کنید.

قطعه کد زیر نحوه رسم یک تصویر برداری در سی شارپ را نشان می دهد.

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 دو روش برای اعمال پوشش تصویر ارائه می دهد:

  • پوشش دستی - از مجموعه ای از ROI به عنوان ماسک استفاده می کند. ROI برای هر برش برای تعریف ماسک استفاده می شود. به ورودی کاربر اضافی نیاز دارد.
  • پوشش خودکار - به داده های ورودی زیادی از کاربر نیاز ندارد اما ممکن است چندان دقیق نباشد.

حال بیایید ببینیم که چگونه می توان ماسک کردن دستی و خودکار را روی تصاویر در کد سی شارپ اعمال کرد.

پوشش دستی تصویر

قطعه کد زیر نحوه اعمال پوشش دستی روی یک تصویر در سی شارپ را نشان می دهد.

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 با strokes محاسبه شده خودکار، 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 از چندین نوع فیلتر پشتیبانی می کند که می توانید آنها را روی تصاویر اعمال کنید، مانند مدیان، موشن وینر، گاوس وینر و غیره.

برای نمایش، به کد زیر نگاهی بیندازید که فیلتر میانه را با استفاده از 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");
}

برش، چرخش و تغییر اندازه تصاویر

برش، چرخش و تغییر اندازه تصاویر به عنوان ویژگی های ضروری برنامه های ویرایش تصویر در نظر گرفته می شود. آنها رایج ترین عملیات پردازش تصویر هستند که برای دستکاری تصاویر دیجیتال استفاده می شوند. بیایید نگاهی به نحوه برش، چرخش و تغییر اندازه تصاویر با استفاده از Aspose.Imaging.Drawing API بیندازیم.

برش یک تصویر

برای برش یک تصویر، باید مقادیر شیفت را برای هر چهار طرف تصویر ارائه کنید. بر اساس این مقادیر، کران های تصویر به سمت مرکز تصویر جابه جا می شوند. قطعه کد C# زیر یک تصویر را بر اساس مقادیر shift ارائه شده برش می دهد.

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;

    // بر اساس مقادیر shift، برش را بر روی تصویر اعمال کنید. روش برش، کران های تصویر را به سمت مرکز تصویر تغییر می دهد و نتایج را در دیسک ذخیره می کند.
    rasterImage.Crop(leftShift, rightShift, topShift, bottomShift);

    // ذخیره تصویر برش خورده
    rasterImage.Save(outputFolder + "cropped_image.jpg");
}

یک تصویر را بچرخانید

برای چرخاندن یک تصویر، Aspose.Imaging.Drawing روش RotateFlip را ارائه می‌کند که نه تنها یک تصویر را می‌چرخاند، بلکه آن را (در صورت نیاز) ورق می‌زند. می توانید گزینه چرخش و چرخش مورد نظر را از RotateFlipType enum انتخاب کنید. قطعه کد زیر نشان می دهد که چگونه یک تصویر را بچرخانید، اما آن را در سی شارپ برگردانید.

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 به سادگی یک پای است. فقط متد Resize را فراخوانی کنید و مقادیر جدید ارتفاع و عرض را ارسال کنید. قطعه کد زیر نحوه تغییر اندازه یک تصویر در سی شارپ را نشان می دهد.

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 رایگان دریافت کنید

اگر می‌خواهید Aspose.Imaging.Drawing API را ارزیابی کنید، می‌توانید [یک مجوز موقت رایگان] دریافت کنید4 که به شما امکان می‌دهد از API تا حداکثر ظرفیت خود بدون هیچ محدودیتی استفاده کنید.

نتیجه

در حوزه گرافیک و پردازش تصویر، Aspose.Imaging.Drawing API به عنوان یک ابزار همه کاره و قدرتمند برای توسعه دهندگان C#.NET برجسته می شود. چه به دنبال بهبود عناصر بصری، تصحیح اعوجاج تصویر یا تبدیل تصاویر بین فرمت‌ها باشید، این API مجموعه‌ای از ویژگی‌ها را ارائه می‌دهد. با Aspose.Imaging.Drawing، دستکاری تصویر در نوک انگشتان شما قرار می‌گیرد و به شما این امکان را می‌دهد تا گرافیک‌های جذاب و از نظر بصری خیره‌کننده به صورت برنامه‌نویسی ایجاد کنید.

در مورد بازخورد یا سؤالات خود در تالار گفتمان به ما اطلاع دهید.