
Niezależnie od tego, czy tworzysz stronę internetową, aplikację komputerową czy mobilną, możliwość manipulowania obrazami i rysowania na nich jest kluczowym aspektem podczas przetwarzania i edycji obrazów. Aby zapewnić programistom zaawansowane, a jednocześnie łatwe do wdrożenia funkcje rysowania, wprowadzamy [Aspose.Imaging.Drawing], potężny interfejs API przeznaczony dla aplikacji C# .NET, oferujący szereg funkcji rysowania obrazów.
- API rysowania C# .NET
- Tworzenie grafiki przy użyciu biblioteki rysunków .NET
- Zastosuj maskowanie do obrazów
- Zastosuj filtry do obrazów
- Przycinaj, obracaj i zmieniaj rozmiar obrazów
- Konwertuj obrazy na inne formaty
Biblioteka rysunków C# .NET
Aspose.Imaging.Drawing to solidny interfejs API, który umożliwia przetwarzanie obrazów rastrowych i wektorowych przy użyciu zaawansowanych technik przetwarzania obrazu. Dzięki natywnemu dostępowi bajtowemu interfejs API zapewnia dużą prędkość przetwarzania podczas tworzenia lub manipulowania obrazami. Korzystając z interfejsu API, możesz rysować obiekty z manipulacją pikselami i ścieżką graficzną oraz konwertować obrazy z jednego formatu na inny. Aspose.Imaging.Drawing używa Aspose.Drawing jako domyślnego silnika graficznego, który jest wieloplatformową biblioteką grafiki 2D oferującą pełny zestaw funkcji do rysowania tekstu, geometrii i obrazów bez żadnych zewnętrznych zależności.
Możesz pobrać i zainstalować Aspose.Imaging.Drawing z NuGet.
PM> NuGet\Install-Package Aspose.Imaging.Drawing
Przyjrzyjmy się teraz niektórym istotnym funkcjom tego interfejsu API rysowania .NET i ich wykorzystaniu za pomocą kodu źródłowego.
Tworzenie grafiki przy użyciu biblioteki rysunków .NET
Aspose.Imaging.Drawing umożliwia tworzenie obrazów poprzez rysowanie różnych obiektów, takich jak okręgi, linie, trójkąty, kwadraty i elipsy. Nie tylko obrazy rastrowe, ale możesz generować obrazy wektorowe za pomocą API. Przyjrzyjmy się, jak rysować obrazy rastrowe i wektorowe w języku C# przy użyciu tego interfejsu API rysowania .NET.
Narysuj obraz rastrowy
Poniżej znajdują się kroki umożliwiające narysowanie obrazu rastrowego przy użyciu interfejsu API Aspose.Imaging.Drawing.
- Najpierw utwórz obraz o żądanym formacie za pomocą metody Image.Create().
- Następnie utwórz obiekt klasy Graphics i zainicjuj go za pomocą utworzonego powyżej obrazu Image.
- Wyczyść powierzchnię obrazu metodą Graphics.Clear.
- Utwórz nowy długopis i zainicjuj go żądanym kolorem.
- Narysuj elipsę (lub dowolny inny obiekt graficzny) za pomocą metody Graphics.DrawEllipse().
- Narysuj wielokąt za pomocą metody Graphics.FillPolygon().
- Na koniec zapisz obraz za pomocą metody Image.Save().
Poniższy fragment kodu pokazuje, jak narysować obraz w języku C#.
string outputFolder = @"Output\";
// Utwórz instancję BmpOptions i ustaw jej różne właściwości
BmpOptions imageOptions = new BmpOptions();
imageOptions.BitsPerPixel = 24;
// Utwórz instancję FileCreateSource i przypisz ją do właściwości Source
imageOptions.Source = new FileCreateSource(outputFolder + "result.bmp", false);
using (var image = Image.Create(imageOptions, 500, 500))
{
var graphics = new Graphics(image);
// Wyczyść powierzchnię obrazu kolorem białym, a następnie utwórz i zainicjuj obiekt Pióro kolorem niebieskim
graphics.Clear(Color.White);
var pen = new Pen(Color.Blue);
// Narysuj elipsę, definiując prostokąt ograniczający o szerokości 150 i wysokości 100. Narysuj także wielokąt za pomocą 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) });
}
// Zapisać obraz
image.Save();
}
Narysuj obraz wektorowy
Podobnie jak w przypadku obrazów rastrowych, w kilku prostych krokach możesz narysować grafikę wektorową, taką jak SVG. Utwórzmy obraz wektorowy, korzystając z naszej biblioteki rysunków C#.
- Najpierw utwórz obiekt MemoryStream.
- Następnie załaduj obraz SVG.
- Rasteryzuj plik SVG do formatu PNG i zapisz wynik w strumieniu.
- Załaduj obraz PNG ze strumienia w celu dalszego rysowania.
- Narysuj obraz PNG na istniejącym obrazie SVG.
- Na koniec zapisz wyniki.
Poniższy fragment kodu pokazuje, jak narysować obraz wektorowy w języku C#.
string templatesFolder = @"Templates\";
string outputFolder = @"Output\";
using (MemoryStream drawnImageStream = new MemoryStream())
{
// Najpierw zrasteryzuj Svg do Png i zapisz wynik w strumieniu.
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);
// Teraz załaduj obraz PNG ze strumienia w celu dalszego rysowania.
drawnImageStream.Seek(0, System.IO.SeekOrigin.Begin);
using (RasterImage imageToDraw = (RasterImage)Image.Load(drawnImageStream))
{
// Czerpanie z istniejącego obrazu Svg.
Aspose.Imaging.FileFormats.Svg.Graphics.SvgGraphics2D graphics = new Aspose.Imaging.FileFormats.Svg.Graphics.SvgGraphics2D(svgImage);
// Zmniejsz cały narysowany obraz 2 razy i narysuj go na środku powierzchni rysunkowej.
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);
// Zapisz obraz wynikowy
using (SvgImage resultImage = graphics.EndRecording())
{
resultImage.Save(outputFolder + "vector_image.svg");
}
}
}
}
Zastosuj maskowanie do obrazów
Maskowanie w edycji obrazu odnosi się do techniki selektywnego ukrywania lub ujawniania pewnych części obrazu. Polega na utworzeniu maski, która jest zasadniczo obrazem w skali szarości, który określa przezroczystość lub nieprzezroczystość każdego piksela na oryginalnym obrazie. Maskowanie obrazu jest szeroko stosowane w rozpoznawaniu i diagnostyce.
Aspose.Image.Drawing udostępnia dwie metody stosowania maskowania obrazu:
- Maskowanie ręczne — wykorzystuje zestaw ROI jako maskę. Do zdefiniowania maski wykorzystywane są ROI dla każdego plasterka. Wymaga dodatkowego wkładu użytkownika.
- Automatyczne maskowanie — nie wymaga od użytkownika dużej ilości danych wejściowych, ale może nie być tak dokładne.
Zobaczmy teraz, jak zastosować ręczne i automatyczne maskowanie obrazów w kodzie C#.
Ręczne maskowanie obrazu
Poniższy fragment kodu pokazuje, jak zastosować ręczne maskowanie obrazu w języku C#.
string outputFolder = @"Output\";
// Plik źródłowy
string sourceFileName = outputFolder + "couple.png";
// Utwórz ścieżkę graficzną
GraphicsPath manualMask = new GraphicsPath();
// Dodaj kształty
Figure firstFigure = new Figure();
firstFigure.AddShape(new EllipseShape(new RectangleF(100, 30, 40, 40)));
firstFigure.AddShape(new RectangleShape(new RectangleF(10, 200, 50, 30)));
// Dodaj figurę
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);
// Zastosuj maskowanie
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);
// Zapisywanie końcowego wyniku maskowania.
using (RasterImage resultImage = (RasterImage)results[1].GetImage())
{
resultImage.Save(outputFolder + "manual_masking.png", new PngOptions() { ColorType = PngColorType.TruecolorWithAlpha });
}
}
Automatyczne maskowanie obrazu
Poniższy fragment kodu stosuje automatyczne maskowanie obrazu przy użyciu interfejsu API rysowania platformy .NET.
string outputFolder = @"Output\";
MaskingResult results;
using (RasterImage image = (RasterImage)Image.Load(outputFolder + "couple.jpg"))
{
// Aby użyć Graph Cut z automatycznie obliczonymi pociągnięciami, używana jest opcja AutoMaskingGraphCutOptions.
AutoMaskingGraphCutOptions options = new AutoMaskingGraphCutOptions
{
// Wskazanie, że podczas dekompozycji obrazu należy wykonać nowe obliczenie domyślnych pociągnięć.
CalculateDefaultStrokes = true,
// Ustawianie promienia wtapiania po procesie na podstawie rozmiaru obrazu.
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 });
}
}
Zastosuj filtry do obrazów
Stosowanie filtrów do obrazów służy różnym celom, a ludzie używają ich z różnych powodów, zarówno praktycznych, jak i artystycznych. Najczęstsze zastosowania filtrów obrazu obejmują korekcję kolorów, poprawę jakości obrazu, stosowanie efektów specjalnych, redukcję szumów i tak dalej. Aspose.Imaging.Drawing obsługuje kilka typów filtrów, które można zastosować do obrazów, takich jak mediana, Weiner ruchu, Weiner Gaussa itp.
W celu demonstracji spójrz na poniższy kod, który stosuje filtr mediany do obrazu za pomocą Aspose.Imaging.Drawing.
string templatesFolder = @"Templates\";
string outputFolder = @"Output\";
// Załaduj zaszumiony obraz
using (Image image = Image.Load(templatesFolder + "template.gif"))
{
// Wrzuć obraz do RasterImage
RasterImage rasterImage = image as RasterImage;
if (rasterImage == null)
{
return;
}
// Utwórz instancję klasy MedianFilterOptions i ustaw rozmiar, zastosuj filtr MedianFilterOptions do obiektu RasterImage i zapisz wynikowy obraz
MedianFilterOptions options = new MedianFilterOptions(4);
rasterImage.Filter(image.Bounds, options);
// Zapisać obraz
image.Save(outputFolder + "median_filter.gif");
}
Przycinaj, obracaj i zmieniaj rozmiar obrazów
Przycinanie, obracanie i zmiana rozmiaru obrazów są uważane za podstawowe funkcje aplikacji do edycji obrazów. Są to najczęstsze operacje przetwarzania obrazu stosowane do manipulowania obrazami cyfrowymi. Przyjrzyjmy się, jak przycinać, obracać i zmieniać rozmiar obrazów za pomocą interfejsu API Aspose.Imaging.Drawing.
Przytnij obraz
Aby przyciąć obraz, musisz podać wartości przesunięcia dla wszystkich czterech stron obrazu. Na podstawie tych wartości granice obrazu są przesuwane w kierunku środka obrazu. Poniższy fragment kodu C# przycina obraz na podstawie podanych wartości przesunięcia.
string templatesFolder = @"Templates\";
string outputFolder = @"Output\";
// Załaduj istniejący obraz do instancji klasy RasterImage
using (RasterImage rasterImage = (RasterImage)Image.Load(templatesFolder + "template.jpg"))
{
// Przed przycięciem obraz powinien zostać zapisany w pamięci podręcznej w celu zapewnienia lepszej wydajności
if (!rasterImage.IsCached)
{
rasterImage.CacheData();
}
// Zdefiniuj wartości przesunięcia dla wszystkich czterech stron
int leftShift = 10;
int rightShift = 10;
int topShift = 10;
int bottomShift = 10;
// W oparciu o wartości przesunięcia zastosuj kadrowanie na obrazie Metoda kadrowania przesunie granice obrazu w kierunku środka obrazu i zapisze wyniki na dysku
rasterImage.Crop(leftShift, rightShift, topShift, bottomShift);
// Zapisz przycięty obraz
rasterImage.Save(outputFolder + "cropped_image.jpg");
}
Obróć obraz
Aby obrócić obraz, Aspose.Imaging.Drawing udostępnia metodę RotateFlip, która nie tylko obraca obraz, ale także go odwraca (w razie potrzeby). Możesz wybrać żądaną opcję obracania i odwracania z wyliczenia RotateFlipType. Poniższy fragment kodu pokazuje, jak obrócić obraz, ale nie odwracać go w języku C#.
string templatesFolder = @"Templates\";
string outputFolder = @"Output\";
// Ładowanie i obracanie obrazu
using (var image = Image.Load(templatesFolder + "template.jpg"))
{
// Obróć obraz
image.RotateFlip(RotateFlipType.Rotate270FlipNone);
// Zapisać obraz
image.Save(outputFolder + "rotated_image.jpg");
}
Zmień rozmiar obrazu
Zmiana rozmiaru obrazu za pomocą Aspose.Imaging.Drawing jest tak prosta, jak ciasto. Wystarczy wywołać metodę Resize i przekazać nowe wartości wysokości i szerokości. Poniższy fragment kodu pokazuje, jak zmienić rozmiar obrazu w języku C#.
string templatesFolder = @"Templates\";
string outputFolder = @"Output\";
using (Image image = Image.Load(templatesFolder + "template.jpg"))
{
// Zmiana rozmiaru obrazu
image.Resize(300, 300);
// Zapisać obraz
image.Save(outputFolder + "resized_image.jpg");
}
Konwertuj obrazy na inne formaty
Aby przekonwertować obraz za pomocą interfejsu API Aspose.Imaging.Drawing, wystarczy załadować obraz i zapisać go w żądanym formacie wyjściowym. Poniższy fragment kodu konwertuje obraz JPG do formatów WebP, PSD, PDF i TIFF.
string templatesFolder = @"Templates\";
string outputFolder = @"Output\";
using (var img = Aspose.Imaging.Image.Load(templatesFolder + "template.jpg"))
{
// Zapisz w różnych formatach obrazu
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));
// Zapisz jako plik PDF
PdfOptions exportOptions = new PdfOptions();
exportOptions.PdfDocumentInfo = new Aspose.Imaging.FileFormats.Pdf.PdfDocumentInfo();
img.Save(outputFolder + "output.pdf", exportOptions);
}
Uzyskaj bezpłatną licencję API
Jeśli chcesz wypróbować interfejs API Aspose.Imaging.Drawing, możesz uzyskać bezpłatną tymczasową licencję, która pozwala na pełne wykorzystanie interfejsu API bez żadnych ograniczeń.
Wniosek
W dziedzinie grafiki i przetwarzania obrazów interfejs API Aspose.Imaging.Drawing wyróżnia się jako wszechstronne i potężne narzędzie dla programistów C# .NET. Niezależnie od tego, czy chcesz ulepszyć elementy wizualne, skorygować zniekształcenia obrazu, czy przekonwertować obrazy między formatami, ten interfejs API zapewnia kompleksowy zestaw funkcji. Dzięki Aspose.Imaging.Drawing manipulacja obrazami jest na wyciągnięcie ręki, umożliwiając programowe tworzenie fascynujących i oszałamiających wizualnie grafik.
Daj nam znać o swoich opiniach i pytaniach na naszym forum.