تبدیل اسلایدهای ارائه به تصاویر در پایتون
مقدمه
Aspose.Slides for Python via Java میتواند اسلایدهای منفرد از ارائههای PowerPoint و OpenDocument را بهصورت PNG، JPEG، GIF، TIFF و سایر فرمتهای تصویر رندر کند.
برای تبدیل یک اسلاید به تصویر، مراحل زیر را دنبال کنید:
- ارائه را با کلاس Presentation بارگذاری کنید.
- اسلایدی که میخواهید رندر کنید انتخاب کنید.
- در صورت نیاز، رندرینگ را با کلاس RenderingOptions یا TiffOptions پیکربندی کنید.
- متد Slide.getImage را فراخوانی کنید. این متد یک شیء تصویر بازمیگرداند.
- تصویر را ذخیره کنید و فرمت خروجی را با مقدار 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()
Warning
برای تبدیل اسلاید به تصویر، مقدار BottomFull را به متد NotesCommentsLayoutingOptions.setNotesPosition پاس ندهید. یادداشتها میتوانند بیش از اندازه تصویر ثابت متنی داشته باشند. بهجای آن از BottomTruncated استفاده کنید.تبدیل اسلایدها به تصاویر با استفاده از گزینههای 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()
Warning
پشتیبانی از TIFF در نسخههای جاوا قبل از JDK 9 تضمین نمیشود.تبدیل تمام اسلایدها به تصاویر
از مجموعه اسلایدها عبور کنید تا تمام ارائه بهصورت مجموعهای از تصاویر تبدیل شود. اسلایدهای مخفی نیز گنجانده میشوند مگر اینکه صراحتاً از پردازش آنها صرفنظر کنید.
مثال زیر هر اسلاید را بهعنوان تصویر 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 اغلب پشتیبانی محدودی یا ناسازگاری در نمایش و ویرایش متافایلهای ویندوز دارند.
رندر رنگی ایموجی
Note
برای رندر صحیح ایموجیهای رنگی هنگام تبدیل اسلایدهای ارائه به تصاویر، فونتهای ایموجی استفادهشده در ارائه باید نصب شده و در سیستمی که تبدیل انجام میشود در دسترس باشند. برای مثال، اگر ارائه از Segoe UI Emoji استفاده کند و این فونت موجود نباشد، ایموجیها ممکن است بهصورت تکرنگ در تصاویر خروجی ظاهر شوند.سؤالهای متداول
آیا Aspose.Slides از رندر اسلایدها با انیمیشنها پشتیبانی میکند؟
خیر. متد Slide.getImage یک تصویر ثابت از اسلاید رندر میکند و انیمیشنها را صادر نمینماید.
آیا میتوان اسلایدهای مخفی را به عنوان تصویر صادر کرد؟
بله. اسلایدهای مخفی میتوانند مانند اسلایدهای عادی رندر شوند. آنها را در حلقه پردازش گنجانده باشید، همانطور که در مثال بالا نشان داده شد.
آیا سایهها و سایر افکتها در تصاویر اسلاید حفظ میشوند؟
بله. Aspose.Slides سایهها، شفافیت و سایر افکتهای گرافیکی پشتیبانیشده را در تصاویر اسلاید رندر میکند.