Chuyển đổi các Slide của Bản trình bày sang Ảnh trong Python
Giới thiệu
Aspose.Slides for Python via Java có thể kết xuất các slide riêng lẻ từ các bản trình bày PowerPoint và OpenDocument dưới dạng PNG, JPEG, GIF, TIFF và các định dạng ảnh khác.
Để chuyển đổi một slide thành ảnh, hãy thực hiện các bước sau:
- Tải bản trình bày bằng lớp Presentation.
- Chọn slide mà bạn muốn kết xuất.
- Nếu cần, cấu hình việc kết xuất bằng lớp RenderingOptions hoặc TiffOptions.
- Gọi phương thức Slide.getImage. Nó trả về một đối tượng ảnh.
- Lưu ảnh và chỉ định định dạng đầu ra bằng giá trị ImageFormat.
Chuyển đổi một Slide thành ảnh PNG
Cách chuyển đổi đơn giản nhất sử dụng cài đặt kết xuất mặc định. Đối tượng ảnh kết quả có thể được xử lý trong bộ nhớ hoặc lưu vào file.
Ví dụ Python sau đây kết xuất slide đầu tiên và lưu nó dưới dạng ảnh 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()
Chuyển đổi các Slide thành ảnh với kích thước tùy chỉnh
Sử dụng phương thức tải quá tải Slide.getImage chấp nhận một giá trị Dimension để kết xuất một slide với kích thước pixel chính xác.
Ví dụ sau tạo một ảnh JPEG kích thước 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()
Chuyển đổi các Slide có Ghi chú và Bình luận thành ảnh
Mặc định, ảnh slide không bao gồm ghi chú hoặc bình luận. Truyền một đối tượng NotesCommentsLayoutingOptions vào phương thức RenderingOptions.setSlidesLayoutOptions để kiểm soát vị trí hiển thị ghi chú và bình luận.
Ví dụ sau đặt ghi chú đã cắt ngắn phía dưới slide và bình luận phía bên phải:
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()
Warning
Đối với việc chuyển đổi slide sang ảnh, không truyền BottomFull vào phương thức NotesCommentsLayoutingOptions.setNotesPosition. Ghi chú có thể chứa nhiều văn bản hơn kích thước ảnh cố định cho phép. Thay vào đó, hãy sử dụng BottomTruncated.Chuyển đổi các Slide thành ảnh sử dụng tùy chọn TIFF
Lớp TiffOptions cho phép bạn kiểm soát kích thước, độ phân giải và các thuộc tính khác của ảnh TIFF đã được kết xuất.
Ví dụ sau kết xuất slide đầu tiên dưới dạng ảnh TIFF kích thước 2160 × 2880 với độ phân giải 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()
Warning
Hỗ trợ TIFF không được đảm bảo trong các phiên bản Java trước JDK 9.Chuyển đổi tất cả các Slide thành ảnh
Duyệt qua bộ sưu tập slide để chuyển đổi toàn bộ bản trình bày thành một loạt các ảnh. Các slide ẩn sẽ được bao gồm trừ khi bạn bỏ qua chúng một cách rõ ràng.
Ví dụ sau kết xuất mỗi slide dưới dạng ảnh JPEG với hệ số phóng đại ngang và dọc là 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()
Tạo đầu ra Enhanced Metafile
Enhanced Metafile (EMF) hữu ích khi cần trao đổi đồ họa dựa trên vector với Microsoft Office hoặc các ứng dụng Windows khác hỗ trợ metafile Windows. Không giống như ảnh dựa trên pixel, EMF có thể lưu giữ các thao tác vẽ vector mà không mất độ sắc nét khi phóng to. Tuy nhiên, EMF chủ yếu là định dạng tương thích cho các ứng dụng hỗ trợ metafile Windows, không phải là định dạng trao đổi chung. Ngoài ra, nội dung slide phức tạp, chẳng hạn như ảnh bitmap và một số hiệu ứng, có thể được lưu dưới dạng các phần tử raster trong container metafile vector.
Xuất một Slide sang EMF
Phương thức Slide.writeAsEmf ghi một Slide vào một luồng đích ở định dạng EMF. Ví dụ sau tải một bản trình bày, chọn slide đầu tiên và ghi nó vào luồng file 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()
Người gọi chịu trách nhiệm sở hữu luồng được truyền vào Slide.writeAsEmf và phải đóng luồng này, như đã trình bày ở trên.
Chuyển đổi ảnh SVG sang EMF và thêm vào bản trình bày
Sử dụng SvgImage.writeAsEmf để chuyển đổi nội dung SVG sang EMF. Các byte kết quả có thể được thêm vào bản trình bày thông qua ImageCollection.addImage và đặt trên một slide bằng ShapeCollection.addPictureFrame.
Ví dụ sau tạo một SvgImage từ mã SVG, chuyển đổi nó thành EMF trong bộ nhớ, chèn metafile lên slide đầu tiên và lưu bản trình bày:
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 không nhận quyền sở hữu luồng đích. Một ByteArrayOutputStream lưu trữ tất cả dữ liệu được tạo ra trong bộ nhớ, vì vậy không cần đặt lại vị trí trước khi gọi ByteArrayOutputStream.toByteArray. Mảng byte trả về vẫn hợp lệ sau khi luồng được đóng.
Việc tạo EMF khả dụng trên các hệ điều hành được hỗ trợ bởi Aspose.Slides for Python via Java và cấu hình JDK đã chọn, nhưng việc kết xuất có thể khác nhau giữa các nền tảng khi phông chữ hoặc phụ thuộc đồ họa không có. Cài đặt các phông chữ được sử dụng trong nội dung gốc hoặc cấu hình các thay thế phù hợp, tuân thủ yêu cầu nền tảng cho Aspose.Slides for Python via Java, và xác minh kết quả trong ứng dụng tiêu thụ EMF mục tiêu. Các ứng dụng trên Linux và macOS thường có hỗ trợ hạn chế hoặc không nhất quán cho việc hiển thị và chỉnh sửa metafile Windows.
Kết xuất Emoji màu
Note
Để kết xuất emoji màu đúng cách khi chuyển đổi slide trình chiếu sang ảnh, các phông chữ emoji được sử dụng trong bản trình bày phải được cài đặt và có sẵn trên hệ thống thực hiện quá trình chuyển đổi. Ví dụ, nếu bản trình bày sử dụng Segoe UI Emoji nhưng phông chữ này thiếu, emoji có thể hiển thị dưới dạng đơn sắc trong các ảnh đầu ra.Câu hỏi thường gặp
Aspose.Slides có hỗ trợ kết xuất slide có hoạt hình không?
Không. Phương thức Slide.getImage kết xuất một ảnh tĩnh của slide và không xuất hoạt hình.
Có thể xuất các slide ẩn dưới dạng ảnh không?
Có. Các slide ẩn có thể được kết xuất giống như các slide thông thường. Bao gồm chúng trong vòng lặp xử lý, như đã minh họa trong ví dụ ở trên.
Các bóng và các hiệu ứng khác có được giữ lại trong ảnh slide không?
Có. Aspose.Slides kết xuất các bóng, độ trong suốt và các hiệu ứng đồ họa được hỗ trợ khác trong ảnh slide.