สร้างภาพขนาดย่อของรูปร่างงานนำเสนอใน .NET
บทนำ
Aspose.Slides for .NET ถูกใช้เพื่อสร้างไฟล์งานนำเสนอที่แต่ละหน้าเป็นสไลด์ สไลด์เหล่านี้สามารถดูได้โดยการเปิดไฟล์งานนำเสนอด้วย Microsoft PowerPoint แต่บางครั้งนักพัฒนาอาจต้องการดูรูปภาพของรูปร่างแยกกันในโปรแกรมแสดงรูป ในกรณีเช่นนี้ Aspose.Slides for .NET ช่วยคุณสร้างภาพขนาดย่อของรูปร่างสไลด์ วิธีการใช้คุณลักษณะนี้อธิบายไว้ในบทความนี้
บทความนี้อธิบายวิธีสร้างภาพขนาดย่อของสไลด์ในหลายวิธี:
- สร้างภาพขนาดย่อของรูปร่างภายในสไลด์
- สร้างภาพขนาดย่อของรูปร่างสไลด์ด้วยมิติที่ผู้ใช้กำหนด
- สร้างภาพขนาดย่อของรูปร่างในขอบเขตของลักษณะการปรากฏของรูปร่าง
สร้างภาพขนาดย่อของรูปร่างจากสไลด์
เพื่อสร้างภาพขนาดย่อของรูปร่างจากสไลด์ใด ๆ ด้วย Aspose.Slides for .NET:
- สร้างอินสแตนซ์ของคลาส Presentation.
- ดึงอ้างอิงของสไลด์ใด ๆ โดยใช้ ID หรืออินเดกซ์ของมัน.
- รับภาพขนาดย่อของรูปร่างจากสไลด์ที่อ้างอิงโดยใช้สเกลค่าเริ่มต้น.
- บันทึกภาพขนาดย่อไปยังรูปแบบภาพที่ต้องการ.
ตัวอย่างด้านล่างแสดงการสร้างภาพขนาดย่อของรูปร่าง.
using (Presentation presentation = new Presentation("HelloWorld.pptx"))
{
IShape shape = presentation.Slides[0].Shapes[0];
using (IImage image = shape.GetImage())
{
image.Save("Shape_thumbnail_out.png", ImageFormat.Png);
}
}
สร้างภาพขนาดย่อด้วยค่าปัจจัยสเกลที่กำหนดโดยผู้ใช้
เพื่อสร้างภาพขนาดย่อของรูปร่างสไลด์ใด ๆ ด้วย Aspose.Slides for .NET:
- สร้างอินสแตนซ์ของคลาส
Presentation. - ดึงอ้างอิงของสไลด์ใด ๆ โดยใช้ ID หรืออินเดกซ์ของมัน.
- รับภาพขนาดย่อของสไลด์ที่อ้างอิงพร้อมขอบเขตของรูปร่าง.
- บันทึกภาพขนาดย่อไปยังรูปแบบภาพที่ต้องการ.
ตัวอย่างด้านล่างแสดงการสร้างภาพขนาดย่อโดยใช้ค่าปัจจัยสเกลที่กำหนดโดยผู้ใช้.
ShapeThumbnailBounds bounds = ShapeThumbnailBounds.Shape;
float scale = 1; // การสเกลตามแกน X และ Y.
using (Presentation presentation = new Presentation("HelloWorld.pptx"))
{
IShape shape = presentation.Slides[0].Shapes[0];
using (IImage image = shape.GetImage(bounds, scale, scale))
{
image.Save("Scaling Factor Thumbnail_out.png", ImageFormat.Png);
}
}
สร้างภาพขนาดย่อของรูปร่างตามขอบเขตของลักษณะการปรากฏ
วิธีนี้สำหรับการสร้างภาพขนาดย่อของรูปร่างช่วยให้นักพัฒนาสามารถสร้างภาพขนาดย่อยภายในขอบเขตของลักษณะการปรากฏของรูปร่างได้ โดยจะคำนึงถึงเอฟเฟกต์ทั้งหมดของรูปร่าง ภาพขนาดย่อของรูปร่างที่สร้างจะถูกจำกัดโดยขอบเขตของสไลด์ เพื่อสร้างภาพขนาดย่อของรูปร่างสไลด์ใด ๆ ภายในขอบเขตของลักษณะการปรากฏ ให้ใช้โค้ดตัวอย่างต่อไปนี้:
- สร้างอินสแตนซ์ของคลาส
Presentation. - ดึงอ้างอิงของสไลด์ใด ๆ โดยใช้ ID หรืออินเดกซ์ของมัน.
- รับภาพขนาดย่อของสไลด์ที่อ้างอิงโดยใช้ขอบเขตของรูปร่างเป็นลักษณะการปรากฏ.
- บันทึกภาพขนาดย่อไปยังรูปแบบภาพที่ต้องการ.
ตัวอย่างด้านล่างแสดงการสร้างภาพขนาดย่อโดยใช้ค่าปัจจัยสเกลที่กำหนดโดยผู้ใช้.
ShapeThumbnailBounds bounds = ShapeThumbnailBounds.Appearance;
float scale = 1; // การสเกลตามแกน X และ Y.
using (Presentation presentation = new Presentation("HelloWorld.pptx"))
{
IShape shape = presentation.Slides[0].Shapes[0];
using (IImage image = shape.GetImage(bounds, scale, scale))
{
image.Save("Shape_thumbnail_Bound_Shape_out.png", ImageFormat.Png);
}
}
รับขอบเขตภาพจริงของรูปร่าง
คุณสมบัติเฟรมของ IShape — X, Y, Width, และ Height — อธิบายสี่เหลี่ยมที่จัดเก็บในโมเดลงานนำเสนอ เนื้อหาที่ทำการเรนเดอร์จริงอาจขยายออกไปนอกเฟรมหรือครอบคลุมสี่เหลี่ยมที่จัดแนวแกนต่างกัน การหมุน, โครงร่าง, ลูกศรหัว, การจัดวางข้อความและการล้น, รูปร่าง SmartArt ที่สร้างขึ้น, และเอฟเฟกต์การเรนเดอร์อื่น ๆ ทั้งหมดสามารถเปลี่ยนแปลงพื้นที่ที่ใช้ได้
ใช้ GetVisualBounds เพื่อคำนวณพื้นที่นั้นโดยไม่ต้องสร้างภาพ วิธีนี้จะคืนค่า RectangleF ในพิกัดของสไลด์ สี่เหลี่ยมที่คืนค่าไม่ถูกคลิปให้พอดีกับสไลด์ ดังนั้นพิกัดอาจเป็นค่าลบเมื่อเนื้อหาขยายเกินจุดกำเนิดของสไลด์
GetVisualBounds ยังไม่ได้ถูกประกาศในอินเตอร์เฟส IShape ดังนั้นให้เก็บรูปร่างที่ดึงมาจากคอลเลกชันรูปร่างของสไลด์เป็นค่าอินเตอร์เฟสและทำการแคสต์เฉพาะเมื่อเรียกใช้เมธอดนั้น
ตัวอย่างต่อไปนี้ดึงและเปรียบเทียบเฟรมกับขอบเขตภาพจริง:
using var presentation = new Presentation("example.pptx");
var slide = presentation.Slides[0];
IShape shape = slide.Shapes[0];
var visualBounds = ((Shape)shape).GetVisualBounds();
var frameBounds = new RectangleF(shape.X, shape.Y, shape.Width, shape.Height);
Console.WriteLine($"Frame bounds: {frameBounds}");
Console.WriteLine($"Visual bounds: {visualBounds}");
RectangleF เดียวกันสามารถใช้จัดเรียงรูปร่างที่อยู่ใกล้เคียงให้ชิดด้าน Left, Right, Top, หรือ Bottom ของมัน; จองพื้นที่เพียงพอในเลย์เอาต์ที่สร้าง; หรือ ตรวจจับเนื้อหานอกพื้นที่ที่อนุญาต ขอบเขตภาพจริงมีประโยชน์อย่างยิ่งสำหรับ SmartArt, กล่องข้อความ, ลูกศร, รูปภาพ, รูปร่างที่หมุน, และกลุ่มรูปร่าง ซึ่งเฟรมที่จัดเก็บอาจไม่สอดคล้องกับผลลัพธ์ที่เรนเดอร์ทั้งหมด
ใช้ GetVisualBounds เมื่อคุณต้องการพิกัดสำหรับการจัดวางหรือการตรวจสอบและไม่ต้องการบิตแมป ใช้ IShape.GetImage เมื่อคุณต้องการเรนเดอร์รูปร่าง ส่วนด้วย ShapeThumbnailBounds ShapeThumbnailBounds.Shape จะกำหนดขนาดภาพจากขอบเขตของรูปร่างรวมถึงการตั้งค่าโครงร่าง ส่วน ShapeThumbnailBounds.Appearance จะกำหนดขนาดจากลักษณะการปรากฏของรูปร่างและจำกัดผลลัพธ์ให้พอใส่ในขอบเขตของสไลด์ ตรงกันข้ามกับ GetVisualBounds ที่คืนเพียงสี่เหลี่ยมที่คำนวณได้และไม่คลิปให้พอดีกับสไลด์
คำถามที่พบบ่อย
รูปแบบภาพใดบ้างที่สามารถใช้เมื่อบันทึกภาพขนาดย่อของรูปร่าง?
PNG, JPEG, BMP, GIF, TIFF, และอื่น ๆ รูปร่างยังสามารถ exported as vector SVG ได้โดยบันทึกเนื้อหารูปร่างเป็น SVG
ความแตกต่างระหว่างขอบเขต Shape และ Appearance คืออะไรเมื่อเรนเดอร์ภาพขนาดย่อ?
Shape ใช้เรขาคณิตของรูปร่าง; Appearance จะคำนึงถึง visual effects (เงา, แสงเรืองแสง ฯลฯ)
จะเกิดอะไรขึ้นถ้ารูปร่างได้รับการตั้งค่าเป็นซ่อน? จะยังคงสร้างภาพขนาดย่อได้หรือไม่?
รูปร่างที่ซ่อนยังคงเป็นส่วนหนึ่งของโมเดลและสามารถเรนเดอร์ได้; ธงซ่อนมีผลต่อการแสดงในโหมดสไลด์โชว์เท่านั้น ไม่ได้ป้องกันการสร้างภาพของรูปร่าง
กลุ่มรูปร่าง, แผนภูมิ, SmartArt, และอ็อบเจกต์ซับซ้อนอื่น ๆ รองรับหรือไม่?
ใช่ ใด ๆ ที่เป็น Shape (รวมถึง GroupShape, Chart, และ SmartArt) สามารถบันทึกเป็นภาพขนาดย่อหรือเป็น SVG ได้
ฟอนต์ที่ติดตั้งในระบบมีผลต่อคุณภาพของภาพขนาดย่อสำหรับรูปร่างข้อความหรือไม่?
มี คุณควร provide the required fonts (หรือ configure font substitutions) เพื่อหลีกเลี่ยงการใช้ฟอนต์สำรองที่ไม่ต้องการและการจัดเรียงข้อความใหม่.