สร้างภาพตัวอย่างของรูปร่างในงานนำเสนอด้วย PHP
บทนำ
Aspose.Slides ใช้เพื่อสร้างไฟล์งานนำเสนอซึ่งแต่ละหน้าจะเป็นสไลด์ สไลด์เหล่านี้สามารถดูได้โดยเปิดไฟล์งานนำเสนอด้วย Microsoft PowerPoint อย่างไรก็ตาม บางครั้งนักพัฒนาอาจต้องการดูภาพของรูปร่างแยกออกในโปรแกรมดูภาพ ในกรณีเช่นนี้ Aspose.Slides ช่วยคุณสร้างภาพตัวอย่างของรูปร่างในสไลด์ วิธีการใช้คุณลักษณะนี้จะอธิบายในบทความนี้
บทความนี้อธิบายวิธีการสร้างภาพตัวอย่างสไลด์ในรูปแบบต่าง ๆ:
- สร้างภาพตัวอย่างของรูปร่างภายในสไลด์
- สร้างภาพตัวอย่างของรูปร่างสำหรับรูปร่างสไลด์โดยกำหนดขนาดตามผู้ใช้
- สร้างภาพตัวอย่างของรูปร่างในขอบเขตของการปรากฏของรูปร่าง
สร้างภาพตัวอย่างของรูปร่างจากสไลด์
เพื่อสร้างภาพตัวอย่างของรูปร่างจากสไลด์ใด ๆ ด้วย Aspose.Slides for PHP via Java ทำตามนี้:
- สร้างอินสแตนซ์ของคลาส Presentation
- ดึงอ้างอิงของสไลด์ใด ๆ ด้วย ID หรือดัชนีของมัน
- รับภาพตัวอย่างของรูปร่าง Get the shape thumbnail image ของสไลด์ที่อ้างถึงด้วยสเกลเริ่มต้น
- บันทึกภาพตัวอย่างในรูปแบบภาพที่คุณต้องการ
ตัวอย่างโค้ดนี้แสดงวิธีการสร้างภาพตัวอย่างของรูปร่างจากสไลด์:
# สร้างคลาส Presentation ที่แสดงถึงไฟล์งานนำเสนอ
$pres = new Presentation("Thumbnail.pptx");
try {
# สร้างภาพขนาดเต็ม
$slideImage = $pres->getSlides()->get_Item(0)->getShapes()->get_Item(0)->getImage();
# บันทึกภาพลงดิสก์ในรูปแบบ PNG
try {
$slideImage->save("output.png", ImageFormat::Png);
} finally {
if (!java_is_null($slideImage)) {
$slideImage->dispose();
}
}
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
สร้างภาพตัวอย่างด้วยอัตราสเกลกำหนดโดยผู้ใช้
เพื่อสร้างภาพตัวอย่างของรูปร่างจากสไลด์ด้วย Aspose.Slides for PHP via Java ทำตามนี้:
- สร้างอินสแตนซ์ของคลาส Presentation
- ดึงอ้างอิงของสไลด์ใด ๆ ด้วย ID หรือดัชนีของมัน
- รับภาพตัวอย่างของรูปร่าง Get the shape thumbnail image ของสไลด์ที่อ้างถึงโดยกำหนดขนาดตามผู้ใช้
- บันทึกภาพตัวอย่างในรูปแบบภาพที่คุณต้องการ
ตัวอย่างโค้ดนี้แสดงวิธีการสร้างภาพตัวอย่างของรูปร่างโดยอิงจากอัตราสเกลที่กำหนด:
# สร้างอินสแตนซ์ของคลาส Presentation ที่แสดงถึงไฟล์งานนำเสนอ
$pres = new Presentation("Thumbnail.pptx");
try {
# สร้างภาพขนาดเต็ม
$slideImage = $pres->getSlides()->get_Item(0)->getShapes()->get_Item(0)->getImage(ShapeThumbnailBounds->Shape, 1, 1);
# บันทึกภาพลงดิสก์ในรูปแบบ PNG
try {
$slideImage->save("output.png", ImageFormat::Png);
} finally {
if (!java_is_null($slideImage)) {
$slideImage->dispose();
}
}
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
สร้างภาพตัวอย่างรูปร่างตามขอบเขตของการปรากฏ
วิธีนี้ช่วยให้ผู้พัฒนาสามารถสร้างภาพตัวอย่างภายในขอบเขตของการปรากฏของรูปร่างได้โดยคำนึงถึงเอฟเฟกต์ทั้งหมดของรูปร่าง ภาพตัวอย่างที่สร้างจะถูกจำกัดโดยขอบของสไลด์ เพื่อสร้างภาพตัวอย่างของรูปร่างสไลด์ในขอบเขตของการปรากฏ ทำตามนี้:
- สร้างอินสแตนซ์ของคลาส Presentation
- ดึงอ้างอิงของสไลด์ใด ๆ ด้วย ID หรือดัชนีของมัน
- รับภาพตัวอย่างของสไลด์ที่อ้างถึงโดยใช้ขอบเขตของรูปร่างเป็นการปรากฏ
- บันทึกภาพตัวอย่างในรูปแบบภาพที่คุณต้องการ
ตัวอย่างโค้ดนี้อิงตามขั้นตอนข้างต้น:
# สร้างอินสแตนซ์ของคลาส Presentation ที่แสดงถึงไฟล์งานนำเสนอ
$pres = new Presentation("Thumbnail.pptx");
try {
# สร้างภาพขนาดเต็ม
$slideImage = $pres->getSlides()->get_Item(0)->getShapes()->get_Item(0)->getImage(ShapeThumbnailBounds->Appearance, 1, 1);
# บันทึกภาพลงดิสก์ในรูปแบบ PNG
try {
$slideImage->save("output.png", ImageFormat::Png);
} finally {
if (!java_is_null($slideImage)) {
$slideImage->dispose();
}
}
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
รับค่าขอบเขตภาพจริงของรูปร่าง
คุณสมบัติกรอบของ Shape — Shape::getX(), Shape::getY(), Shape::getWidth(), และ Shape::getHeight() — รายงานสี่เหลี่ยมที่เก็บไว้ในโมเดลงานนำเสนอ เนื้อหาที่ถูกเรนเดอร์จริงอาจขยายออกไปนอกกรอบนั้นหรืออยู่ในสี่เหลี่ยมที่มีแนวแกนอิงต่างกัน การหมุน, เส้นกรอบ, ปลายลูกศร, การจัดวางและการล้นของข้อความ, รูปทรง SmartArt ที่สร้างขึ้น, และเอฟเฟกต์การเรนเดอร์อื่น ๆ สามารถเปลี่ยนพื้นที่ที่ครอบคลุมได้
ใช้ Shape::getVisualBounds เพื่อคำนวณพื้นที่ที่ครอบคลุมโดยไม่ต้องสร้างภาพ วิธีนี้จะคืนค่าเป็น Rectangle2D.Float ในพิกัดสไลด์ สี่เหลี่ยมที่คืนมาจะไม่ถูกคลิปกับสไลด์ ดังนั้นพิกัดอาจเป็นค่าลบเมื่อเนื้อหาขยายเกินจุดกำเนิดของสไลด์
ตัวอย่างต่อไปนี้รับและเปรียบเทียบกรอบและขอบเขตภาพจริง:
$presentation = new Presentation("example.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$shape = $slide->getShapes()->get_Item(0);
$visualBounds = $shape->getVisualBounds();
$frameX = $shape->getX();
$frameY = $shape->getY();
$frameWidth = $shape->getWidth();
$frameHeight = $shape->getHeight();
$visualX = $visualBounds->getX();
$visualY = $visualBounds->getY();
$visualWidth = $visualBounds->getWidth();
$visualHeight = $visualBounds->getHeight();
echo "Frame bounds (x, y, width, height): $frameX, $frameY, $frameWidth, $frameHeight\n";
echo "Visual bounds (x, y, width, height): $visualX, $visualY, $visualWidth, $visualHeight\n";
} finally {
$presentation->dispose();
}
Rectangle2D.Float เดียวกันสามารถใช้จัดตำแหน่งรูปร่างใกล้เคียงให้อยู่ด้านซ้าย, ด้านขวา, ด้านบน หรือด้านล่าง; จองพื้นที่เพียงพอในเลย์เอาต์ที่สร้างขึ้น; หรือตรวจจับเนื้อหานอกพื้นที่ที่อนุญาต ขอบเขตภาพจริงมีประโยชน์โดยเฉพาะสำหรับ SmartArt, กล่องข้อความ, ลูกศร, รูปภาพ, รูปร่างที่หมุน, และกลุ่มรูปร่างเมื่อกรอบที่เก็บไว้ไม่แสดงผลลัพธ์ที่เรนเดอร์ทั้งหมด
ใช้ Shape::getVisualBounds เมื่อคุณต้องการพิกัดสำหรับการจัดวางหรือการตรวจสอบและไม่ต้องการบิตแมพ ใช้ Shape::getImage เมื่อคุณต้องการเรนเดอร์รูปร่าง กับ ShapeThumbnailBounds ShapeThumbnailBounds::Shape กำหนดขนาดภาพจากขอบเขตของรูปร่างรวมถึงการตั้งค่าเส้นกรอบขณะ ShapeThumbnailBounds::Appearance กำหนดขนาดจากการปรากฏของรูปร่างและจำกัดผลลัพธ์ให้อยู่ภายในขอบของสไลด์ ในทางตรงกันข้าม Shape::getVisualBounds จะคืนค่าเฉพาะสี่เหลี่ยมที่คำนวณและไม่คลิปกับสไลด์
คำถามที่พบบ่อย
รูปแบบภาพใดบ้างที่สามารถใช้ได้เมื่อบันทึกภาพตัวอย่างของรูปร่าง?
PNG, JPEG, BMP, GIF, TIFF, และอื่น ๆ รูปร่างยังสามารถ exported as vector SVG โดยบันทึกเนื้อหารูปร่างเป็น SVG
ความแตกต่างระหว่างขอบเขต Shape และ Appearance เมื่อเรนเดอร์ภาพตัวอย่างคืออะไร?
Shape ใช้เรขาคณิตของรูปร่าง; Appearance พิจารณา visual effects (เงา, แสงสว่าง ฯลฯ)
ถ้ารูปร่างถูกทำเครื่องหมายว่าเป็น hidden จะยังคงเรนเดอร์เป็นภาพตัวอย่างหรือไม่?
รูปร่างที่ซ่อนอยู่ยังคงเป็นส่วนหนึ่งของโมเดลและสามารถเรนเดอร์ได้; ธง hidden มีผลต่อการแสดงสไลด์โชว์แต่ไม่ป้องกันการสร้างภาพของรูปร่าง
รองรับกลุ่มรูปร่าง, แผนภูมิ, SmartArt และอ็อบเจ็กต์ซับซ้อนอื่น ๆ หรือไม่?
ใช่. อ็อบเจ็กต์ใด ๆ ที่แสดงเป็น Shape (รวมถึง GroupShape, Chart, และ SmartArt) สามารถบันทึกเป็นภาพตัวอย่างหรือเป็น SVG ได้
ฟอนต์ที่ติดตั้งในระบบมีผลต่อคุณภาพของภาพตัวอย่างสำหรับรูปรูปข้อความหรือไม่?
ใช่. คุณควร provide the required fonts (หรือ configure font substitutions) เพื่อลดการคืนค่า fallback ที่ไม่ต้องการและการจัดเรียงข้อความใหม่