İ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 API’si
- .NET Çizim Kitaplığını Kullanarak Grafik Oluşturma
- Görüntülere Maskeleme Uygula
- Resimlere Filtre Uygula
- Görüntüleri Kırpın, Döndürün ve Yeniden Boyutlandırın
- Görüntüleri Diğer Formatlara Dönüştürün
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.