แปลงสไลด์การนำเสนอเป็นภาพใน Python

บทนำ

Aspose.Slides for Python via Java สามารถเรนเดอร์สไลด์แต่ละสไลด์จากไฟล์นำเสนอ PowerPoint และ OpenDocument เป็นรูปแบบภาพ PNG, JPEG, GIF, TIFF และรูปแบบภาพอื่น ๆ

เพื่อแปลงสไลด์เป็นภาพ ให้ทำตามขั้นตอนต่อไปนี้:

  1. โหลดไฟล์นำเสนอด้วยคลาส Presentation
  2. เลือกสไลด์ที่คุณต้องการเรนเดอร์
  3. หากจำเป็น ให้กำหนดค่าการเรนเดอร์ด้วยคลาส RenderingOptions หรือ TiffOptions
  4. เรียกเมธอด Slide.getImage จะคืนค่าอ็อบเจ็กต์รูปภาพ
  5. บันทึกรูปภาพและระบุรูปแบบเอาต์พุตด้วยค่า ImageFormat

แปลงสไลด์เป็นภาพ PNG

การแปลงที่ง่ายที่สุดใช้การตั้งค่าการเรนเดอร์เริ่มต้น โดยอ็อบเจ็กต์ภาพที่ได้สามารถประมวลผลในหน่วยความจำหรือบันทึกเป็นไฟล์ได้

ตัวอย่าง Python ด้านล่างเรนเดอร์สไลด์แรกและบันทึกเป็นภาพ PNG:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import ImageFormat, Presentation

presentation = Presentation("Presentation.pptx")
try:
    slide = presentation.getSlides().get_Item(0)

    image = slide.getImage()
    try:
        image.save("Slide_0.png", ImageFormat.Png)
    finally:
        image.dispose()
finally:
    presentation.dispose()

แปลงสไลด์เป็นภาพด้วยขนาดกำหนดเอง

ใช้เมธอด overload ของ Slide.getImage ที่รับค่า Dimension เพื่อเรนเดอร์สไลด์ด้วยขนาดพิกเซลที่ต้องการอย่างแม่นยำ

ตัวอย่างต่อไปนี้สร้างภาพ JPEG ขนาด 1820 × 1040 พิกเซล:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import ImageFormat, Presentation
from java.awt import Dimension

image_size = Dimension(1820, 1040)

presentation = Presentation("Presentation.pptx")
try:
    slide = presentation.getSlides().get_Item(0)

    image = slide.getImage(image_size)
    try:
        image.save("Slide_0.jpg", ImageFormat.Jpeg)
    finally:
        image.dispose()
finally:
    presentation.dispose()

แปลงสไลด์พร้อมบันทึกโน้ตและคอมเมนต์เป็นภาพ

โดยค่าเริ่มต้น ภาพสไลด์จะไม่รวมโน้트หรือคอมเมนต์ ให้ส่งอ็อบเจ็กต์ NotesCommentsLayoutingOptions ไปยังเมธอด RenderingOptions.setSlidesLayoutOptions เพื่อควบคุมตำแหน่งที่โน้ตและคอมเมนต์ปรากฏ

ตัวอย่างต่อไปนี้วางโน้ตที่ถูกตัดทอนด้านล่างสไลด์และคอมเมนต์ทางด้านขวา:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import CommentsPositions, ImageFormat, NotesCommentsLayoutingOptions, NotesPositions, Presentation, RenderingOptions
from java.awt import Color

scale_x = 2.0
scale_y = scale_x

comments_area_color = Color(250, 235, 215)

layout_options = NotesCommentsLayoutingOptions()
layout_options.setNotesPosition(NotesPositions.BottomTruncated)
layout_options.setCommentsPosition(CommentsPositions.Right)
layout_options.setCommentsAreaWidth(500)
layout_options.setCommentsAreaColor(comments_area_color)

rendering_options = RenderingOptions()
rendering_options.setSlidesLayoutOptions(layout_options)

presentation = Presentation("Presentation_with_notes_and_comments.pptx")
try:
    slide = presentation.getSlides().get_Item(0)

    image = slide.getImage(rendering_options, scale_x, scale_y)
    try:
        image.save("Image_with_notes_and_comments_0.gif", ImageFormat.Gif)
    finally:
        image.dispose()
finally:
    presentation.dispose()

แปลงสไลด์เป็นภาพโดยใช้ตัวเลือก TIFF

คลาส TiffOptions ให้คุณควบคุมขนาด ความละเอียด และคุณสมบัติอื่น ๆ ของภาพ TIFF ที่เรนเดอร์

ตัวอย่างต่อไปนี้เรนเดอร์สไลด์แรกเป็นภาพ TIFF ขนาด 2160 × 2880 พิกเซล ที่ 300 DPI:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import ImageFormat, Presentation, TiffOptions
from java.awt import Dimension

image_size = Dimension(2160, 2880)

tiff_options = TiffOptions()
tiff_options.setImageSize(image_size)
tiff_options.setDpiX(300)
tiff_options.setDpiY(300)

presentation = Presentation("sample.pptx")
try:
    slide = presentation.getSlides().get_Item(0)

    image = slide.getImage(tiff_options)
    try:
        image.save("output.tiff", ImageFormat.Tiff)
    finally:
        image.dispose()
finally:
    presentation.dispose()

แปลงสไลด์ทั้งหมดเป็นภาพ

วนลูปผ่านคอลเลกชันสไลด์เพื่อแปลงไฟล์นำเสนอทั้งหมดเป็นชุดของภาพ สไลด์ที่ซ่อนอยู่จะรวมอยู่ด้วย เว้นแต่คุณจะข้ามโดยเจตนา

ตัวอย่างต่อไปนี้เรนเดอร์ทุกสไลด์เป็นภาพ JPEG ด้วยอัตราการขยายแนวนอนและแนวตั้งเป็น 2 เท่า:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import ImageFormat, Presentation

scale_x = 2.0
scale_y = scale_x

presentation = Presentation("Presentation.pptx")
try:
    slide_count = presentation.getSlides().size()
    for index in range(slide_count):
        slide = presentation.getSlides().get_Item(index)
        image = slide.getImage(scale_x, scale_y)
        try:
            image.save(f"Slide_{index}.jpg", ImageFormat.Jpeg)
        finally:
            image.dispose()
finally:
    presentation.dispose()

สร้างเอาต์พุตเป็น Enhanced Metafile

Enhanced Metafile (EMF) มีประโยชน์เมื่อกราฟิกแบบเวกเตอร์ต้องแลกเปลี่ยนกับ Microsoft Office หรือแอปพลิเคชัน Windows อื่นที่รองรับ Windows metafiles ต่างจากภาพพิกเซล EMF สามารถเก็บการดำเนินการวาดเวกเตอร์ที่ขยายได้โดยไม่สูญเสียความคมชัด อย่างไรก็ตาม EMF เป็นรูปแบบที่เน้นความเข้ากันได้สำหรับแอปพลิเคชันที่รองรับ Windows metafile ไม่ใช่รูปแบบแลกเปลี่ยนสากล นอกจากนี้ เนื้อหาสไลด์ที่ซับซ้อน เช่น ภาพบิตแมปและเอฟเฟกต์บางอย่าง อาจถูกจัดเก็บเป็นองค์ประกอบราสเตอร์ภายในคอนเทนเนอร์เมตาฟายล์เวกเตอร์

ส่งออกสไลด์เป็น EMF

เมธอด Slide.writeAsEmf เขียน Slide ไปยังสตรีมเป้าหมายในรูปแบบ EMF ตัวอย่างต่อไปนี้โหลดไฟล์นำเสนอ เลือกสไลด์แรก แล้วเขียนเป็นสตรีมไฟล์ EMF:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation
from java.io import FileOutputStream

presentation = Presentation("Presentation.pptx")
try:
    slide = presentation.getSlides().get_Item(0)

    emf_stream = FileOutputStream("Slide_0.emf")
    try:
        slide.writeAsEmf(emf_stream)
    finally:
        emf_stream.close()
finally:
    presentation.dispose()

ผู้เรียกต้องเป็นเจ้าของสตรีมที่ส่งให้กับ Slide.writeAsEmf และต้องรับผิดชอบปิดสตรีมนั้นตามที่แสดงข้างต้น

แปลงภาพ SVG เป็น EMF แล้วใส่ลงในไฟล์นำเสนอ

ใช้ SvgImage.writeAsEmf เพื่อแปลงเนื้อหา SVG เป็น EMF ไบต์ที่ได้สามารถเพิ่มลงในไฟล์นำเสนอผ่าน ImageCollection.addImage และวางบนสไลด์ด้วย ShapeCollection.addPictureFrame

ตัวอย่างต่อไปนี้สร้าง SvgImage จากโค้ด SVG แปลงเป็น EMF ในหน่วยความจำ แทรกเมตาฟายล์ลงบนสไลด์แรก และบันทึกไฟล์นำเสนอ:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat, ShapeType, SvgImage
from java.io import ByteArrayOutputStream

svg_content = "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"200\" height=\"100\"><rect width=\"200\" height=\"100\" fill=\"#4472C4\"/></svg>"
svg_image = SvgImage(svg_content)

presentation = Presentation()
try:
    slide = presentation.getSlides().get_Item(0)

    emf_stream = ByteArrayOutputStream()
    try:
        svg_image.writeAsEmf(emf_stream)

        emf_data = emf_stream.toByteArray()
        image = presentation.getImages().addImage(emf_data)
        slide.getShapes().addPictureFrame(ShapeType.Rectangle, 20, 20, 200, 100, image)
    finally:
        emf_stream.close()

    presentation.save("Presentation_with_emf.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

SvgImage.writeAsEmf ไม่รับครอบครองสตรีมปลายทาง ByteArrayOutputStream จะเก็บข้อมูลที่สร้างทั้งหมดในหน่วยความจำ ดังนั้นจึงไม่ต้องรีเซ็ตตำแหน่งก่อนเรียก ByteArrayOutputStream.toByteArray ไบต์อาร์เรย์ที่คืนค่าจะยังคงใช้ได้หลังจากสตรีมถูกปิด

การสร้าง EMF มีให้ใช้บนระบบปฏิบัติการที่สนับสนุนโดย Aspose.Slides for Python via Java และการกำหนดค่า JDK ที่เลือก อย่างไรก็ตาม การเรนเดอร์อาจแตกต่างกันในแต่ละแพลตฟอร์มเมื่อฟอนต์หรือกราฟิกที่ต้องการไม่มี การติดตั้งฟอนต์ที่ใช้ในเนื้อหาแหล่งที่มาติดตั้งหรือกำหนดค่าการทดแทนที่เหมาะสม ปฏิบัติตาม ความต้องการของแพลตฟอร์ม สำหรับ Aspose.Slides for Python via Java และตรวจสอบผลลัพธ์ในแอปพลิเคชันที่รับ EMF ผลลัพธ์ Linux และ macOS บางครั้งอาจมีการสนับสนุนแสดงและแก้ไข Windows metafile ที่จำกัดหรือไม่สอดคล้องกัน

การเรนเดอร์สี Emoji

คำถามที่พบบ่อย

Aspose.Slides รองรับการเรนเดอร์สไลด์พร้อมแอนิเมชันหรือไม่?

ไม่ เมธอด Slide.getImage จะเรนเดอร์ภาพนิ่งของสไลด์และไม่ส่งออกแอนิเมชัน

สไลด์ที่ซ่อนไว้สามารถส่งออกเป็นภาพได้หรือไม่?

ได้ สามารถเรนเดอร์สไลด์ที่ซ่อนไว้เช่นสไลด์ปกติ รวมไว้ในลูปการประมวลผลตามตัวอย่างข้างต้น

เงาและเอฟเฟกต์อื่น ๆ จะถูกรักษาในภาพสไลด์หรือไม่?

ได้ Aspose.Slides จะเรนเดอร์เงา ความโปร่งแสง และเอฟเฟกต์กราฟิกอื่น ๆ ที่รองรับในภาพสไลด์