تبدیل اسلایدهای ارائه به تصاویر در پایتون

مقدمه

Aspose.Slides for Python via Java می‌تواند اسلایدهای منفرد از ارائه‌های PowerPoint و OpenDocument را به‌صورت PNG، JPEG، GIF، TIFF و سایر فرمت‌های تصویر رندر کند.

برای تبدیل یک اسلاید به تصویر، مراحل زیر را دنبال کنید:

  1. ارائه را با کلاس Presentation بارگذاری کنید.
  2. اسلایدی که می‌خواهید رندر کنید انتخاب کنید.
  3. در صورت نیاز، رندرینگ را با کلاس RenderingOptions یا TiffOptions پیکربندی کنید.
  4. متد Slide.getImage را فراخوانی کنید. این متد یک شیء تصویر بازمی‌گرداند.
  5. تصویر را ذخیره کنید و فرمت خروجی را با مقدار ImageFormat مشخص کنید.

تبدیل اسلاید به تصویر PNG

ساده‌ترین روش تبدیل از تنظیمات پیش‌فرض رندرینگ استفاده می‌کند. شیء تصویر حاصل می‌تواند در حافظه پردازش شود یا در فایلی ذخیره گردد.

مثال زیر اسلاید اول را رندر کرده و به‌عنوان تصویر 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 به اندازه ۱۸۲۰ × ۱۰۴۰ ایجاد می‌کند:

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 با ابعاد ۲۱۶۰ × ۲۸۸۰ و وضوح ۳۰۰ 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 با ضریب مقیاس افقی و عمودی برابر با ۲ رندر می‌کند:

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 یا برنامه‌های دیگر ویندوزی که از متافایل‌های ویندوز پشتیبانی می‌کنند، تبادل شوند. برخلاف تصویر پیکسلی، EMF می‌تواند عملیات رسم برداری را حفظ کند که بدون افت وضوح مقیاس می‌شوند. با این حال، EMF عمدتاً یک فرمت سازگاری برای برنامه‌های دارای پشتیبانی از متافایل ویندوز است و نه یک فرمت تبادل جهانی. علاوه بر این، محتوای پیچیده اسلاید، مانند تصاویر بیت‌مپ و برخی افکت‌ها، ممکن است به‌صورت عناصر رستر شده داخل بستهٔ متافایل برداری ذخیره شوند.

صدور اسلاید به 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 هدف اعتبارسنجی کنید. برنامه‌های لینوکس و macOS اغلب پشتیبانی محدودی یا ناسازگاری در نمایش و ویرایش متافایل‌های ویندوز دارند.

رندر رنگی ایموجی

سؤال‌های متداول

آیا Aspose.Slides از رندر اسلایدها با انیمیشن‌ها پشتیبانی می‌کند؟

خیر. متد Slide.getImage یک تصویر ثابت از اسلاید رندر می‌کند و انیمیشن‌ها را صادر نمی‌نماید.

آیا می‌توان اسلایدهای مخفی را به عنوان تصویر صادر کرد؟

بله. اسلایدهای مخفی می‌توانند مانند اسلایدهای عادی رندر شوند. آن‌ها را در حلقه پردازش گنجانده باشید، همان‌طور که در مثال بالا نشان داده شد.

آیا سایه‌ها و سایر افکت‌ها در تصاویر اسلاید حفظ می‌شوند؟

بله. Aspose.Slides سایه‌ها، شفافیت و سایر افکت‌های گرافیکی پشتیبانی‌شده را در تصاویر اسلاید رندر می‌کند.