Raster ve Vektör Görselleri Çizin

İster bir web sitesi, ister masaüstü uygulaması, ister mobil uygulama oluşturuyor olun, görüntüleri işleme ve düzenleme yeteneği, görüntüleri işleme ve düzenleme sırasında çok önemli bir husustur. Geliştiricilere gelişmiş ancak uygulaması kolay çizim özellikleri sağlamak amacıyla, C# .NET uygulamaları için tasarlanmış, çeşitli görüntü çizim özellikleri sunan güçlü bir API olan Aspose.Imaging.Drawing‘i sunuyoruz.

C# .NET Çizim Kitaplığı

Aspose.Imaging.Drawing, gelişmiş görüntü işleme teknikleriyle raster ve vektör görüntüleri işlemenize olanak tanıyan güçlü bir API’dir. Yerel bayt erişimiyle API, görüntüleri oluştururken veya değiştirirken yüksek işlem hızı sağlar. API’yi kullanarak piksel manipülasyonu ve grafik yolu ile nesneler çizebilir ve görüntüleri bir formattan diğerine dönüştürebilirsiniz. Aspose.Imaging.Drawing, varsayılan grafik motoru olarak Aspose.Drawing‘yi kullanır; bu, herhangi bir harici bağımlılık olmadan metin, geometri ve görüntü çizmek için eksiksiz bir özellikler seti sunan platformlar arası bir 2D grafik kitaplığıdır.

Aspose.Imaging.Drawing’i NuGet adresinden indirip kurabilirsiniz.

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

Şimdi bu .NET Çizim API’sinin bazı göze çarpan özelliklerine ve bunların kaynak kodu yardımıyla kullanımına bir göz atalım.

.NET Çizim Kitaplığını Kullanarak Grafik Oluşturma

Aspose.Imaging.Drawing daire, çizgi, üçgen, kare, elips gibi farklı nesneleri çizerek görseller oluşturmanıza olanak sağlar. API’yi kullanarak yalnızca raster görüntüler değil, vektör görüntüler de oluşturabilirsiniz. Bu .NET çizim API’sini kullanarak C#’ta raster ve vektör görüntülerinin nasıl çizileceğine bir göz atalım.

Raster Görüntü Çiz

Aşağıda Aspose.Imaging.Drawing API’sini kullanarak taramalı görüntü çizme adımları verilmiştir.

  • Öncelikle Image.Create() yöntemini kullanarak istediğiniz formatta bir görüntü oluşturun.
  • Daha sonra Graphics sınıfına ait bir nesne oluşturup onu yukarıda oluşturduğumuz Image ile başlatıyoruz.
  • Graphics.Clear yöntemini kullanarak görüntünün yüzeyini temizleyin.
  • Yeni bir Kalem oluşturun ve onu istediğiniz renkle başlatın.
  • Graphics.DrawEllipse() yöntemini kullanarak bir elips (veya başka bir grafik nesnesi) çizin.
  • Graphics.FillPolygon() yöntemini kullanarak bir çokgen çizin.
  • Son olarak Image.Save() yöntemini kullanarak görüntüyü kaydedin.

Aşağıdaki kod parçacığı C#’ta bir görüntünün nasıl çizileceğini gösterir.

string outputFolder = @"Output\";

// Bir BmpOptions örneği oluşturun ve çeşitli özelliklerini ayarlayın
BmpOptions imageOptions = new BmpOptions();
imageOptions.BitsPerPixel = 24;

// FileCreateSource örneğini oluşturun ve onu Source özelliğine atayın 
imageOptions.Source = new FileCreateSource(outputFolder + "result.bmp", false);

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

    // Görüntü yüzeyini beyaz renkle temizleyin ve mavi renkli bir Kalem nesnesi oluşturun ve başlatın
    graphics.Clear(Color.White);
    var pen = new Pen(Color.Blue);

    // Genişliği 150 ve yüksekliği 100 olan sınırlayıcı dikdörtgeni tanımlayarak Elips çizin Ayrıca LinearGradientBrush'u kullanarak bir çokgen çizin
    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) });
    }

    // Resmi Kaydet
    image.Save();
}

Vektör Resmini Çiz

Raster görüntülere benzer şekilde, SVG gibi vektör grafiklerini birkaç basit adımda çizebilirsiniz. C# çizim kütüphanemizi kullanarak bir vektör görüntüsü oluşturalım.

  • Öncelikle bir MemoryStream nesnesi oluşturun.
  • Ardından bir SVG resmi yükleyin.
  • SVG’yi PNG’ye rasterleştirin ve sonucu bir akışa yazın.
  • Daha fazla çizim için akıştan bir PNG görüntüsü yükleyin.
  • Mevcut SVG resminin üzerine PNG resmini çizin.
  • Son olarak sonuçları kaydedin.

Aşağıdaki kod parçacığı, C# dilinde bir vektör görüntüsünün nasıl çizileceğini gösterir.

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

using (MemoryStream drawnImageStream = new MemoryStream())
{
    // Öncelikle Svg'yi Png olarak rasterleştirin ve sonucu bir akışa yazın.
    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);

        // Şimdi daha fazla çizim için akıştan bir Png görüntüsü yükleyin.
        drawnImageStream.Seek(0, System.IO.SeekOrigin.Begin);
        using (RasterImage imageToDraw = (RasterImage)Image.Load(drawnImageStream))
        {
            // Mevcut Svg görüntüsü üzerinde çizim.
            Aspose.Imaging.FileFormats.Svg.Graphics.SvgGraphics2D graphics = new Aspose.Imaging.FileFormats.Svg.Graphics.SvgGraphics2D(svgImage);

            // Çizilen görüntünün tamamını 2 kat küçültün ve çizim yüzeyinin ortasına çizin.
            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);

            // Sonuç resmini kaydedin
            using (SvgImage resultImage = graphics.EndRecording())
            {
                resultImage.Save(outputFolder + "vector_image.svg");
            }
        }
    }
}

Görüntülere Maskeleme Uygula

Görüntü düzenlemede maskeleme, görüntünün belirli bölümlerini seçici olarak gizleme veya ortaya çıkarma tekniğini ifade eder. Orijinal görüntüdeki her pikselin şeffaflığını veya opaklığını tanımlayan, esasen gri tonlamalı bir görüntü olan bir maske oluşturmayı içerir. Görüntü maskeleme, tanıma ve tanılama amacıyla yaygın olarak uygulanmaktadır.

Aspose.Image.Drawing, görüntü maskeleme uygulamak için iki yöntem sunar:

  • Manuel Maskeleme - Maske olarak bir dizi ROI kullanır. Her dilimin ROI’leri maskeyi tanımlamak için kullanılır. Ek kullanıcı girişi gerektirir.
  • Otomatik Maskeleme - Kullanıcıdan çok fazla giriş verisi alınmasını gerektirmez ancak o kadar doğru olmayabilir.

Şimdi C# kodunda görsellere manuel ve otomatik maskelemenin nasıl uygulanacağını görelim.

Manuel Görüntü Maskeleme

Aşağıdaki kod parçacığı, C# dilinde bir görüntüye manuel maskelemenin nasıl uygulanacağını gösterir.

string outputFolder = @"Output\";

// Kaynak dosyası
string sourceFileName = outputFolder + "couple.png";

// Grafik yolu oluştur
GraphicsPath manualMask = new GraphicsPath();

// Şekil ekle
Figure firstFigure = new Figure();
firstFigure.AddShape(new EllipseShape(new RectangleF(100, 30, 40, 40)));
firstFigure.AddShape(new RectangleShape(new RectangleF(10, 200, 50, 30)));

// Şekil ekle
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);

// Maskeleme uygula
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);
    // Nihai maskeleme sonucu kaydediliyor.
    using (RasterImage resultImage = (RasterImage)results[1].GetImage())
    {
        resultImage.Save(outputFolder + "manual_masking.png", new PngOptions() { ColorType = PngColorType.TruecolorWithAlpha });
    }
}

Otomatik Görüntü Maskeleme

Aşağıdaki kod parçacığı, .NET çizim API’sini kullanarak bir görüntüye otomatik maskeleme uygular.

string outputFolder = @"Output\";

MaskingResult results;
using (RasterImage image = (RasterImage)Image.Load(outputFolder + "couple.jpg"))
{
    // Otomatik olarak hesaplanan vuruşlarla Grafik Kesimi kullanmak için AutoMaskingGraphCutOptions kullanılır.
    AutoMaskingGraphCutOptions options = new AutoMaskingGraphCutOptions
    {
        // Görüntü ayrıştırma sırasında varsayılan vuruşların yeni bir hesaplamasının yapılması gerektiğini belirtir.
        CalculateDefaultStrokes = true,
        
        // Görüntü boyutuna göre işlem sonrası geçiş yumuşatma yarıçapını ayarlama.
        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 });
    }
}

Resimlere Filtre Uygula

Resimlere filtre uygulamak çeşitli amaçlara hizmet eder ve insanlar bunları hem pratik hem de sanatsal olmak üzere çeşitli nedenlerle kullanır. Görüntü filtrelerinin en yaygın kullanım alanları arasında renk düzeltme, görüntü kalitesinin artırılması, özel efektler uygulama, gürültü azaltma vb. yer alır. Aspose.Imaging.Drawing, görüntülere uygulayabileceğiniz medyan, motion weiner, gauss weiner vb. gibi çeşitli filtre türlerini destekler.

Gösterim için Aspose.Imaging.Drawing kullanarak bir görüntüye medyan filtresini uygulayan aşağıdaki koda bakın.

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

// Gürültülü görüntüyü yükle 
using (Image image = Image.Load(templatesFolder + "template.gif"))
{
    // Görüntüyü RasterImage'a aktarın
    RasterImage rasterImage = image as RasterImage;
    if (rasterImage == null)
    {
        return;
    }

    // MedianFilterOptions sınıfının bir örneğini oluşturun ve boyutu ayarlayın, MedianFilterOptions filtresini RasterImage nesnesine uygulayın ve elde edilen görüntüyü kaydedin
    MedianFilterOptions options = new MedianFilterOptions(4);
    rasterImage.Filter(image.Bounds, options);

    // Resmi Kaydet
    image.Save(outputFolder + "median_filter.gif");
}

Görüntüleri Kırpın, Döndürün ve Yeniden Boyutlandırın

Görüntüleri kırpma, döndürme ve yeniden boyutlandırma, görüntü düzenleme uygulamalarının temel özellikleri olarak kabul edilir. Dijital görüntüleri işlemek için kullanılan en yaygın görüntü işleme işlemleridir. Aspose.Imaging.Drawing API’yi kullanarak görüntülerin nasıl kırpılacağına, döndürüleceğine ve yeniden boyutlandırılacağına bir göz atalım.

Bir Görüntüyü Kırp

Bir görüntüyü kırpmak için görüntünün dört tarafının tamamı için kaydırma değerlerini sağlamanız gerekir. Bu değerlere bağlı olarak görüntü sınırları görüntünün merkezine doğru kaydırılır. Aşağıdaki C# kod parçacığı, sağlanan kaydırma değerlerine göre bir görüntüyü kırpar.

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

// Mevcut bir görüntüyü RasterImage sınıfının bir örneğine yükleme
using (RasterImage rasterImage = (RasterImage)Image.Load(templatesFolder + "template.jpg"))
{
    // Kırpmadan önce, daha iyi performans için görselin önbelleğe alınması gerekir
    if (!rasterImage.IsCached)
    {
        rasterImage.CacheData();
    }

    // Dört tarafın tümü için kaydırma değerlerini tanımlayın
    int leftShift = 10;
    int rightShift = 10;
    int topShift = 10;
    int bottomShift = 10;

    // Kaydırma değerlerine bağlı olarak görüntüye kırpma işlemini uygulayın. Kırpma yöntemi, görüntü sınırlarını görüntünün merkezine doğru kaydırır ve sonuçları diske kaydeder.
    rasterImage.Crop(leftShift, rightShift, topShift, bottomShift);

    // Kırpılan resmi kaydet
    rasterImage.Save(outputFolder + "cropped_image.jpg");
}

Bir Görüntüyü Döndürme

Bir görüntüyü döndürmek için Aspose.Imaging.Drawing, yalnızca görüntüyü döndürmekle kalmayıp aynı zamanda (gerekirse) çeviren RotateFlip yöntemini sağlar. RotateFlipType numaralandırmasından istediğiniz döndürme ve çevirme seçeneğini seçebilirsiniz. Aşağıdaki kod parçacığı, C#’ta bir görüntünün nasıl döndürüleceğini ancak çevrilmemesini gösterir.

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

// Görüntüyü Yükleme ve Döndürme
using (var image = Image.Load(templatesFolder + "template.jpg"))
{
    // Resmi döndür
    image.RotateFlip(RotateFlipType.Rotate270FlipNone);

    // Resmi Kaydet
    image.Save(outputFolder + "rotated_image.jpg");
}

Bir Resmi Yeniden Boyutlandır

Aspose.Imaging.Drawing’i kullanarak bir görüntüyü yeniden boyutlandırmak çok kolaydır. Sadece Resize yöntemini çağırın ve yeni yükseklik ve genişlik değerlerini iletin. Aşağıdaki kod parçacığı, C# dilinde bir görüntünün nasıl yeniden boyutlandırılacağını gösterir.

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

using (Image image = Image.Load(templatesFolder + "template.jpg"))
{
    // Görüntüyü yeniden boyutlandırmak
    image.Resize(300, 300);

    // Resmi Kaydet
    image.Save(outputFolder + "resized_image.jpg");
}   

Görüntüleri Diğer Formatlara Dönüştürün

Aspose.Imaging.Drawing API’yi kullanarak bir görüntüyü dönüştürmek için yalnızca görüntüyü yüklemeniz ve istediğiniz çıktı formatında kaydetmeniz gerekir. Aşağıdaki kod parçacığı bir JPG görüntüsünü WebP, PSD, PDF ve TIFF formatlarına dönüştürür.

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

using (var img = Aspose.Imaging.Image.Load(templatesFolder + "template.jpg"))
{
    // Farklı görüntü formatlarında kaydedin
    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 olarak kaydet
    PdfOptions exportOptions = new PdfOptions();
    exportOptions.PdfDocumentInfo = new Aspose.Imaging.FileFormats.Pdf.PdfDocumentInfo();
    img.Save(outputFolder + "output.pdf", exportOptions);
}

Ücretsiz API Lisansı Alın

Aspose.Imaging.Drawing API’yi değerlendirmek istiyorsanız, API’yi herhangi bir sınırlama olmadan tam kapasitesinde kullanmanıza olanak tanıyan ücretsiz bir geçici lisans alabilirsiniz.

Çözüm

Grafik ve görüntü işleme alanında Aspose.Imaging.Drawing API, C# .NET geliştiricileri için çok yönlü ve güçlü bir araç olarak öne çıkıyor. İster görsel öğeleri geliştirmek, görüntüdeki bozulmaları düzeltmek veya görüntüleri formatlar arasında dönüştürmek istiyor olun, bu API kapsamlı bir dizi özellik sunar. Aspose.Imaging.Drawing ile görüntü manipülasyonu parmaklarınızın ucuna geliyor ve programlı olarak ilgi çekici ve görsel olarak etkileyici grafikler oluşturmanıza olanak tanıyor.

Geri bildirimlerinizi veya sorularınızı forumumuz üzerinden bize bildirin.