ไม่ว่าคุณจะสร้างเว็บไซต์ แอปพลิเคชันเดสก์ท็อป หรือแอปมือถือ ความสามารถในการจัดการและวาดภาพถือเป็นสิ่งสำคัญในการประมวลผลและแก้ไขรูปภาพ เพื่อส่งเสริมนักพัฒนาด้วยฟีเจอร์การวาดภาพขั้นสูงแต่ใช้งานง่าย เราขอแนะนำ Aspose.Imaging. Drawing ซึ่งเป็น API อันทรงพลังที่ออกแบบมาสำหรับแอปพลิเคชัน C# .NET ซึ่งนำเสนอฟีเจอร์การวาดภาพที่หลากหลาย
- C# .NET API การวาด
- การสร้างกราฟิกโดยใช้ .NET Drawing Library
- ใช้การมาสก์กับรูปภาพ
- ใช้ตัวกรองกับรูปภาพ
- ครอบตัด หมุน และปรับขนาดรูปภาพ
- แปลงรูปภาพเป็นรูปแบบอื่น
ไลบรารี่การวาด C# .NET
Aspose.Imaging. Drawing เป็น API ที่มีประสิทธิภาพซึ่งช่วยให้คุณประมวลผลภาพแรสเตอร์และเวกเตอร์ด้วยเทคนิคการประมวลผลภาพขั้นสูง ด้วยการเข้าถึงไบต์ดั้งเดิม API ช่วยให้มั่นใจได้ถึงความเร็วในการประมวลผลสูงในขณะที่สร้างหรือจัดการรูปภาพ เมื่อใช้ API คุณสามารถวาดวัตถุด้วยการจัดการพิกเซลและเส้นทางกราฟิก และแปลงรูปภาพจากรูปแบบหนึ่งเป็นอีกรูปแบบหนึ่งได้ Aspose.Imaging. Drawing ใช้ Aspose. Drawing เป็นกลไกกราฟิกเริ่มต้น ซึ่งเป็นไลบรารีกราฟิก 2D ข้ามแพลตฟอร์มที่นำเสนอชุดคุณสมบัติที่ครบถ้วนสำหรับการวาดข้อความ รูปทรงเรขาคณิต และรูปภาพโดยไม่ต้องพึ่งพาภายนอกใดๆ
คุณสามารถดาวน์โหลดและติดตั้ง Aspose.Imaging. Drawing ได้จาก NuGet
PM> NuGet\Install-Package Aspose.Imaging.Drawing
ตอนนี้เรามาดูคุณสมบัติเด่นบางประการของ .NET Drawing API และการใช้งานด้วยความช่วยเหลือของซอร์สโค้ดกัน
การสร้างกราฟิกโดยใช้ .NET Drawing Library
Aspose.Imaging. Drawing ช่วยให้คุณสร้างภาพโดยการวาดวัตถุต่างๆ เช่น วงกลม เส้น สามเหลี่ยม สี่เหลี่ยม และวงรี ไม่เพียงแต่ภาพแรสเตอร์เท่านั้น แต่คุณสามารถสร้างภาพเวกเตอร์โดยใช้ API ได้ มาดูวิธีการวาดภาพแรสเตอร์และเวกเตอร์ใน C# โดยใช้ .NET drawing API นี้กันดีกว่า
วาดภาพแรสเตอร์
ด้านล่างนี้เป็นขั้นตอนในการวาดภาพแรสเตอร์โดยใช้ Aspose.Imaging. Drawing API
- ขั้นแรก สร้างรูปภาพในรูปแบบที่ต้องการโดยใช้วิธี Image.Create()
- จากนั้นสร้างอ็อบเจ็กต์ของคลาส Graphics และเริ่มต้นด้วย Image ที่เราสร้างขึ้นด้านบน
- ล้างพื้นผิวของภาพโดยใช้วิธี Graphics.Clear
- สร้างปากกาใหม่และเริ่มต้นด้วยสีที่ต้องการ
- วาดวงรี (หรือวัตถุกราฟิกอื่น ๆ ) โดยใช้เมธอด Graphics.DrawEllipse()
- วาดรูปหลายเหลี่ยมโดยใช้วิธี Graphics.FillPolygon()
- สุดท้าย ให้บันทึกรูปภาพโดยใช้วิธี Image.Save()
ข้อมูลโค้ดต่อไปนี้แสดงวิธีการวาดภาพใน C#
string outputFolder = @"Output\";
// สร้างอินสแตนซ์ของ BmpOptions และตั้งค่าคุณสมบัติต่างๆ
BmpOptions imageOptions = new BmpOptions();
imageOptions.BitsPerPixel = 24;
// สร้างอินสแตนซ์ของ FileCreateSource และกำหนดให้กับคุณสมบัติแหล่งที่มา
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 มีสองวิธีในการใช้การมาสก์รูปภาพ:
- การมาสก์ด้วยตนเอง - ใช้ชุดของ ROI เป็นตัวพราง ROI สำหรับแต่ละส่วนใช้เพื่อกำหนดมาสก์ จำเป็นต้องป้อนข้อมูลผู้ใช้เพิ่มเติม
- การปิดบังอัตโนมัติ - ไม่ต้องการข้อมูลอินพุตจำนวนมากจากผู้ใช้ แต่อาจไม่แม่นยำนัก
ตอนนี้เรามาดูวิธีการใช้การมาสก์แบบแมนนวลและอัตโนมัติกับรูปภาพในโค้ด 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 รองรับฟิลเตอร์หลายประเภทที่คุณสามารถนำไปใช้กับรูปภาพได้ เช่น ค่ามัธยฐาน โมชั่นไวเนอร์ เกาส์ไวเนอร์ เป็นต้น
สำหรับการสาธิต โปรดดูโค้ดต่อไปนี้ที่ใช้ตัวกรองค่ามัธยฐานกับรูปภาพโดยใช้ 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# ต่อไปนี้จะครอบตัดรูปภาพตามค่าการเปลี่ยนแปลงที่ให้ไว้
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 นั้นง่ายดายเหมือนพาย เพียงเรียกใช้เมธอด Resize และส่งค่าความสูงและความกว้างใหม่ ข้อมูลโค้ดต่อไปนี้แสดงวิธีปรับขนาดรูปภาพใน 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 ฟรี
หากคุณต้องการประเมิน Aspose.Imaging. Drawing API คุณสามารถ [รับใบอนุญาตชั่วคราวฟรี] ได้ 4 ซึ่งช่วยให้คุณใช้ API ได้เต็มประสิทธิภาพโดยไม่มีข้อจำกัดใดๆ
บทสรุป
ในขอบเขตของการประมวลผลกราฟิกและรูปภาพ Aspose.Imaging. Drawing API มีความโดดเด่นในฐานะเครื่องมืออเนกประสงค์และทรงประสิทธิภาพสำหรับนักพัฒนา C# .NET ไม่ว่าคุณกำลังมองหาการปรับปรุงองค์ประกอบภาพ แก้ไขการบิดเบือนของภาพ หรือแปลงรูปภาพระหว่างรูปแบบ API นี้มีชุดคุณลักษณะที่ครอบคลุม ด้วย Aspose.Imaging.Drawing การปรับแต่งภาพจะเกิดขึ้นเพียงปลายนิ้วสัมผัส ช่วยให้คุณสร้างกราฟิกที่สวยงามน่าดึงดูดและสวยงามโดยทางโปรแกรม
แจ้งให้เราทราบเกี่ยวกับข้อเสนอแนะหรือข้อสงสัยของคุณใน ฟอรั่ม ของเรา