استخراج الصور من أشكال العرض التقديمي في Python
استخراج الصور من الأشكال
غالبًا ما يتم إضافة الصور إلى الأشكال وتُستخدم أيضًا بشكل متكرر كخلفيات للشرائح. يتم إضافة كائنات الصورة عبر IImageCollection، وهي مجموعة من كائنات IPPImage.
تشرح هذه المقالة كيفية استخراج الصور المضافة إلى العروض التقديمية.
لاسترجاع صورة من عرض تقديمي، يجب أولًا تحديد موقع الصورة عبر المرور على كل شريحة ثم المرور على كل شكل. بمجرد العثور على الصورة أو تحديدها، يمكنك استخراجها وحفظها كملف جديد. XXX
import aspose.slides as slides
def get_image_format(image_type):
return {
"jpeg": slides.ImageFormat.JPEG,
"emf": slides.ImageFormat.EMF,
"bmp": slides.ImageFormat.BMP,
"png": slides.ImageFormat.PNG,
"wmf": slides.ImageFormat.WMF,
"gif": slides.ImageFormat.GIF,
}.get(image_type, slides.ImageFormat.JPEG)
with slides.Presentation("pres.pptx") as pres:
#الوصول إلى العرض التقديمي
slideIndex = 0
image_type = ""
ifImageFound = False
for slide in pres.slides:
slideIndex += 1
#الوصول إلى الشريحة الأولى
image_format = slides.ImageFormat.JPEG
back_image = None
file_name = "BackImage_Slide_{0}{1}.{2}"
is_layout = False
if slide.background.fill_format.fill_type == slides.FillType.PICTURE:
#الحصول على الصورة الخلفية
back_image = slide.background.fill_format.picture_fill_format.picture.image
elif slide.layout_slide.background.fill_format.fill_type == slides.FillType.PICTURE:
#الحصول على الصورة الخلفية
back_image = slide.layout_slide.background.fill_format.picture_fill_format.picture.image
is_layout = True
if back_image is not None:
#ضبط تنسيق الصورة المطلوب
image_type = back_image.content_type.split("/")[1]
image_format = get_image_format(image_type)
back_image.image.save(
file_name.format("LayoutSlide_" if is_layout else "", slideIndex, image_type),
image_format)
for i in range(len(slide.shapes)):
shape = slide.shapes[i]
shape_image = None
if type(shape) is slides.AutoShape and shape.fill_format.fill_type == slides.FillType.PICTURE:
shape_image = shape.fill_format.picture_fill_format.picture.image
elif type(shape) is slides.PictureFrame:
shape_image = shape.picture_format.picture.image
if shape_image is not None:
image_type = shape_image.content_type.split("/")[1]
image_format = get_image_format(image_type)
shape_image.image.save(
file_name.format("shape_"+str(i)+"_", slideIndex, image_type),
image_format)
الأسئلة الشائعة
هل يمكنني استخراج الصورة الأصلية دون أي قص أو تأثيرات أو تحويلات الشكل؟
نعم. عندما تصل إلى صورة الشكل، تحصل على كائن الصورة من مجموعة الصور الخاصة بالعرض التقديمي، وهو ما يعني البكسلات الأصلية دون قص أو تأثيرات تنسيق. تتنقل سير العمل عبر مجموعة صور العرض التقديمي وكائنات PPImage التي تخزن البيانات الخام.
هل هناك خطر من تكرار ملفات متطابقة عند حفظ العديد من الصور مرة واحدة؟
نعم، إذا قمت بحفظ كل شيء دون تمييز. قد تحتوي مجموعة الصور الخاصة بالعرض التقديمي على بيانات ثنائية متطابقة يتم الإشارة إليها من قِبل أشكال أو شرائح مختلفة. لتجنب التكرار، قارن التجزئات أو الأحجام أو محتويات البيانات المستخرجة قبل الكتابة.
كيف يمكنني تحديد الأشكال المرتبطة بصورة معينة من مجموعة صور العرض التقديمي؟
لا يحتفظ Aspose.Slides بروابط عكسية من PPImage إلى الأشكال. يمكنك إنشاء خريطة يدوية أثناء التجول: كلما وجدت إشارة إلى PPImage، سجل الأشكال التي تستخدمه.
هل يمكنني استخراج الصور المضمنة داخل كائنات OLE، مثل المستندات المرفقة؟
ليس مباشرةً، لأن كائن OLE هو حاوية. تحتاج إلى استخراج حزمة OLE نفسها ثم تحليل محتوياتها باستخدام أدوات منفصلة. تعمل أشكال الصور في العروض التقديمية عبر PPImage؛ OLE هو نوع كائن مختلف.