إضافة إطارات الصور إلى العروض التقديمية باستخدام Python
نظرة عامة
تسمح لك إطارات الصور في Aspose.Slides for Python بوضع وإدارة الصور النقطية والمتجهة كأشكال شريحة أصلية. يمكنك إدراج الصور من الملفات أو التدفقات، وتحديد موضعها وتغيير حجمها باستخدام إحداثيات دقيقة، وتطبيق الدوران، وتعيين الشفافية، والتحكم في ترتيب z إلى جانب الأشكال الأخرى. يدعم API أيضًا القص، والحفاظ على نسب الأبعاد، وتعيين الحدود والتأثيرات، واستبدال الصورة الأساسية دون إعادة بناء التخطيط. نظرًا لأن إطارات الصور تتصرف كالأشكال العادية، يمكنك إضافة الرسوم المتحركة والارتباطات التشعبية والنص البديل، مما يجعل بناء عروض تقديمية غنية بصريًا وسهلة الوصول أمرًا بسيطًا.
إنشاء إطارات الصور
يوضح هذا القسم كيفية إدراج صورة في شريحة عن طريق إنشاء PictureFrame باستخدام Aspose.Slides for Python. ستتعلم كيفية تحميل الصورة، وضعها بدقة على الشريحة، والتحكم في حجمها وتنسيقها.
- إنشاء نسخة من الفئة Presentation.
- احصل على شريحة بواسطة فهرسها.
- إنشاء كائن PPImage بإضافة الصورة إلى ImageCollection الخاصة بالعرض التقديمي. ستُستخدم هذه الصورة لملء الشكل.
- حدد عرض الإطار وارتفاعه.
- إنشاء PictureFrame بهذا الحجم باستخدام طريقة add_picture_frame.
- احفظ العرض التقديمي كملف PPTX.
import aspose.slides as slides
# إنشاء كائن من فئة Presentation لتمثيل ملف PPTX.
with slides.Presentation() as presentation:
# احصل على الشريحة الأولى.
slide = presentation.slides[0]
# أضف الصورة إلى العرض التقديمي.
with open("image.jpeg", "rb") as image_stream:
image = presentation.images.add_image(image_stream)
# أضف إطار صورة بحجم الصورة.
picture_frame = slide.shapes.add_picture_frame(slides.ShapeType.RECTANGLE, 50, 50, image.width, image.height, image)
# احفظ العرض التقديمي كملف PPTX.
presentation.save("picture_frame.pptx", slides.export.SaveFormat.PPTX)
إنشاء إطارات صور بمقياس نسبي
يوضح هذا القسم وضع صورة بحجم ثابت، ثم تطبيق تحجيم بنسب مئوية بشكل مستقل على عرضها وارتفاعها. نظرًا لأن النسب قد تختلف، قد تتغير نسبة الأبعاد. يتم تنفيذ التحجيم نسبةً لأبعاد الصورة الأصلية.
- إنشاء نسخة من الفئة Presentation.
- احصل على شريحة بواسطة فهرسها.
- إنشاء كائن PPImage بإضافة الصورة إلى ImageCollection.
- إضافة PictureFrame إلى الشريحة.
- تحديد العرض والارتفاع النسبيين لإطار الصورة.
- احفظ العرض التقديمي كملف PPTX.
import aspose.slides as slides
# إنشاء كائن من فئة Presentation لتمثيل ملف PPTX.
with slides.Presentation() as presentation:
# الحصول على الشريحة الأولى.
slide = presentation.slides[0]
# إضافة الصورة إلى مجموعة صور العرض التقديمي.
with open("image.jpeg", "rb") as image_stream:
image = presentation.images.add_image(image_stream)
# إضافة إطار صورة إلى الشريحة.
picture_frame = slide.shapes.add_picture_frame(slides.ShapeType.RECTANGLE, 50, 50, 100, 100, image)
# ضبط العرض والارتفاع بالنسبة النسبية.
picture_frame.relative_scale_height = 0.8
picture_frame.relative_scale_width = 1.35
# حفظ العرض التقديمي.
presentation.save("relative_scaling.pptx", slides.export.SaveFormat.PPTX)
استخراج الصور النقطية من إطارات الصور
يمكنك استخراج الصور النقطية من كائنات PictureFrame وحفظها بصيغ PNG أو JPG أو صيغ أخرى. يوضح المثال البرمجي أدناه كيفية استخراج صورة من المستند “sample.pptx” وحفظها بصيغة PNG.
import aspose.slides as slides
with slides.Presentation("sample.pptx") as presentation:
first_slide = presentation.slides[0]
first_shape = first_slide.shapes[0]
if isinstance(first_shape, slides.PictureFrame):
image = first_shape.picture_format.picture.image.image
image.save("slide_1_shape_1.png", slides.ImageFormat.PNG)
استخراج صور SVG من إطارات الصور
عند احتواء عرض تقديمي على رسومات SVG موضوعة داخل أشكال PictureFrame، يتيح لك Aspose.Slides for Python via .NET استرجاع الصور المتجهة الأصلية بجودة كاملة. من خلال استعراض مجموعة أشكال الشريحة، يمكنك التعرف على كل PictureFrame، والتحقق ما إذا كان كائن PPImage المتضمن يحتوي على محتوى SVG، ثم حفظ تلك الصورة إلى القرص أو تدفق بصيغة SVG الأصلية.
import aspose.slides as slides
with slides.Presentation("sample.pptx") as presentation:
slide = presentation.slides[0]
shape = slide.shapes[0]
if isinstance(shape, slides.PictureFrame):
svg_image = shape.picture_format.picture.image.svg_image
if svg_image is not None:
with open("output.svg", "w", encoding="utf-8") as svg_stream:
svg_stream.write(svg_image.svg_content)
الحصول على شفافية الصورة
يتيح لك Aspose.Slides استرجاع تأثير الشفافية المطبق على صورة. يوضح الكود التالي العملية في Python:
import aspose.slides as slides
with slides.Presentation("sample.pptx") as presentation:
picture_frame = presentation.slides[0].shapes[0]
image_transform = picture_frame.picture_format.picture.image_transform
for effect in image_transform:
if isinstance(effect, slides.effects.AlphaModulateFixed):
transparency_value = 100 - effect.amount
print("Picture transparency: " + str(transparency_value))
تنسيق إطار الصورة
يوفر Aspose.Slides العديد من خيارات التنسيق التي يمكنك تطبيقها على إطار صورة. باستخدام هذه الخيارات، يمكنك تعديل إطار الصورة لتلبية المتطلبات المحددة.
- إنشاء نسخة من الفئة Presentation.
- احصل على شريحة بواسطة فهرسها.
- إنشاء كائن PPImage بإضافة الصورة إلى ImageCollection. ستُستخدم هذه الصورة لملء الشكل.
- حدد عرض الإطار وارتفاعه.
- إنشاء PictureFrame بهذا الحجم باستخدام طريقة add_picture_frame الخاصة بالشريحة.
- تعيين لون خط إطار الصورة.
- تعيين عرض خط إطار الصورة.
- تدوير إطار الصورة بتوفير قيمة موجبة (عقارب الساعة) أو سالبة (عكس عقارب الساعة).
- احفظ العرض التقديمي المعدل كملف PPTX.
import aspose.slides as slides
import aspose.pydrawing as draw
# إنشاء كائن من فئة Presentation لتمثيل ملف PPTX.
with slides.Presentation() as presentation:
# الحصول على الشريحة الأولى.
slide = presentation.slides[0]
# إضافة الصورة إلى مجموعة صور العرض التقديمي.
with open("image.jpeg", "rb") as image_stream:
image = presentation.images.add_image(image_stream)
# إضافة إطار صورة بحجم الصورة.
picture_frame = slide.shapes.add_picture_frame(slides.ShapeType.RECTANGLE, 50, 50, image.width, image.height, image)
# تطبيق تنسيق على إطار الصورة.
picture_frame.line_format.fill_format.fill_type = slides.FillType.SOLID
picture_frame.line_format.fill_format.solid_fill_color.color = draw.Color.blue
picture_frame.line_format.width = 20
picture_frame.rotation = 45
# حفظ العرض التقديمي كملف PPTX.
presentation.save("picture_formatting.pptx", slides.export.SaveFormat.PPTX)
Tip
طورت Aspose أداة مجانية تُدعى Collage Maker. إذا كنت بحاجة إلى دمج صور JPG/JPEG أو PNG، أو إنشاء شبكات صور، يمكنك استخدام هذه الخدمة.إضافة الصور كروابط
للحفاظ على حجم ملفات العرض التقديمي صغيرًا، يمكنك إضافة الصور أو مقاطع الفيديو عبر روابط بدلاً من تضمين الملفات مباشرة في العروض. يوضح الكود التالي كيفية إدراج صورة وفيديو في عنصر نائب:
import aspose.slides as slides
with slides.Presentation("input.pptx") as presentation:
slide = presentation.slides[0]
shapes_to_remove = []
for shape in slide.shapes:
if shape.placeholder is None:
continue
if shape.placeholder.type == slides.PlaceholderType.PICTURE:
picture_frame = slide.shapes.add_picture_frame(
slides.ShapeType.RECTANGLE, shape.x, shape.y, shape.width, shape.height, None)
picture_frame.picture_format.picture.link_path_long = \
"https://upload.wikimedia.org/wikipedia/commons/3/3a/I.M_at_Old_School_Public_Broadcasting_in_October_2016_02.jpg"
shapes_to_remove.append(shape)
elif shape.placeholder.type == slides.PlaceholderType.MEDIA:
video_frame = slide.shapes.add_video_frame(shape.X, shape.Y, shape.width, shape.height, "")
video_frame.picture_format.picture.link_path_long = \
"https://upload.wikimedia.org/wikipedia/commons/3/3a/I.M_at_Old_School_Public_Broadcasting_in_October_2016_02.jpg"
video_frame.link_path_long = "https://youtu.be/t_1LYZ102RA"
shapes_to_remove.append(shape)
for shape in shapes_to_remove:
slide.shapes.remove(shape)
presentation.save("output.pptx", slides.export.SaveFormat.PPTX)
قص الصور
في هذا القسم، ستتعلم كيفية قص المنطقة المرئية من صورة داخل إطار صورة دون تعديل ملف المصدر. ستتعلم أيضًا الطريقة الأساسية لتطبيق هوامش القص لإنشاء تركيبة نظيفة ومركزة مباشرة على الشريحة.
import aspose.slides as slides
with slides.Presentation() as presentation:
slide = presentation.slides[0]
# إضافة الصورة إلى مجموعة الصور في العرض التقديمي.
with slides.Images.from_file("image.png") as source_image:
image = presentation.images.add_image(source_image)
# إضافة إطار صورة إلى الشريحة.
picture_frame = slide.shapes.add_picture_frame(slides.ShapeType.RECTANGLE, 100, 100, 420, 250, image)
# قص الصورة (قيم النسبة المئوية).
picture_frame.picture_format.crop_left = 23.6
picture_frame.picture_format.crop_right = 21.5
picture_frame.picture_format.crop_top = 3
picture_frame.picture_format.crop_bottom = 31
# حفظ النتيجة.
presentation.save("cropped_image.pptx", slides.export.SaveFormat.PPTX)
حذف المناطق المقصوصة من الصور
إذا أردت حذف المناطق المقصوصة من صورة في إطار، استخدم طريقة delete_picture_cropped_areas. تُعيد هذه الطريقة الصورة المقصوصة، أو الصورة الأصلية إذا لم يكن هناك قص مطلوب.
import aspose.slides as slides
with slides.Presentation("sample.pptx") as presentation:
slide = presentation.slides[0]
# احصل على إطار الصورة من الشريحة الأولى.
picture_frame = slides.shape[0]
# احصل على إطار الصورة من الشريحة الأولى.
cropped_image = picture_frame.picture_format.delete_picture_cropped_areas()
# احفظ النتيجة.
presentation.save("deleted_cropped_areas.pptx", slides.export.SaveFormat.PPTX)
NOTE
تضيف طريقة delete_picture_cropped_areas الصورة المقصوصة إلى مجموعة صور العرض التقديمي. إذا كانت الصورة تُستخدم فقط في PictureFrame المُعالجة، يمكن أن يقلل ذلك من حجم العرض؛ وإلا قد يزداد عدد الصور في العرض الناتج.
أثناء القص، تقوم هذه الطريقة بتحويل ملفات WMF/EMF الميتافايل إلى صورة PNG نقطية.
قفل نسبة الأبعاد
إذا رغبت في أن يحتفظ الشكل الذي يحتوي على صورة بنسبة أبعاده بعد تغيير أبعاد الصورة، عيّن الخاصية aspect_ratio_locked إلى True.
import aspose.slides as slides
with slides.Presentation("sample.pptx") as presentation:
layout = presentation.layout_slides.get_by_type(slides.SlideLayoutType.CUSTOM)
empty_slide = presentation.slides.add_empty_slide(layout)
with slides.Images.from_file("image.png") as source_image:
image = presentation.images.add_image(source_image)
picture_frame = empty_slide.shapes.add_picture_frame(slides.ShapeType.RECTANGLE, 50, 50, image.width, image.height, image)
# قفل نسبة الأبعاد عند إعادة التحجيم.
picture_frame.picture_frame_lock.aspect_ratio_locked = True
presentation.save("aspect_ratio_locked.pptx", slides.export.SaveFormat.PPTX)
NOTE
إعداد قفل نسبة الأبعاد يحافظ فقط على نسبة أبعاد الشكل، لا على نسبة أبعاد الصورة داخل الشكل.استخدام خصائص إزاحة التمدد
باستخدام خصائص stretch_offset_left وstretch_offset_top وstretch_offset_right وstretch_offset_bottom من فئة PictureFillFormat، يمكنك تعريف مستطيل ملء.
عند تحديد تمدد لصورة، يتم تحجيم المستطيل المصدر ليتناسب مع مستطيل الملء. كل حد من حدود مستطيل الملء يُحدد بنسبة إزاحة من الحد المقابل لصندوق حدود الشكل. النسبة الموجبة تُشير إلى تقليل، بينما النسبة السالبة تُشير إلى زيادة.
- إنشاء نسخة من الفئة Presentation.
- الحصول على مرجع إلى شريحة بواسطة فهرسها.
- إضافة AutoShape مستطيل.
- تعيين نوع ملء الشكل.
- تعيين وضع ملء صورة الشكل.
- تحميل صورة.
- إسناد الصورة لملء الشكل.
- تحديد إزاحات الصورة من الحدود المقابلة لصندوق حدود الشكل.
- احفظ العرض التقديمي كملف PPTX.
import aspose.slides as slides
# إنشاء كائن من فئة Presentation التي تمثل ملف PPTX.
with slides.Presentation() as presentation:
# الحصول على الشريحة الأولى.
slide = presentation.slides[0]
# إضافة شكل أوتوماتيكي مستطيل.
shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 20, 20, 300, 300)
# تعيين نوع ملء الشكل.
shape.fill_format.fill_type = slides.FillType.PICTURE
# تعيين وضع ملء الصورة للشكل.
shape.fill_format.picture_fill_format.picture_fill_mode = slides.PictureFillMode.STRETCH
# تحميل الصورة وإضافتها إلى العرض التقديمي.
with open("image.jpeg", "rb") as image_stream:
image = presentation.images.add_image(image_stream)
# إسناد الصورة لملء الشكل.
shape.fill_format.picture_fill_format.picture.image = image
# تحديد إزاحات الصورة من الحواف المقابلة لمربع حدود الشكل.
shape.fill_format.picture_fill_format.stretch_offset_left = 25
shape.fill_format.picture_fill_format.stretch_offset_right = 25
shape.fill_format.picture_fill_format.stretch_offset_top = -20
shape.fill_format.picture_fill_format.stretch_offset_bottom = -10
# حفظ ملف PPTX إلى القرص.
presentation.save("stretch_offset.pptx", slides.export.SaveFormat.PPTX)
Tip
توفر Aspose محولات مجانية—JPEG إلى PowerPoint وPNG إلى PowerPoint—تتيح لك إنشاء عروض تقديمية بسرعة من الصور.الأسئلة الشائعة
كيف يمكنني معرفة تنسيقات الصور المدعومة لـ PictureFrame؟
يدعم Aspose.Slides كلًا من الصور النقطية (PNG، JPEG، BMP، GIF، إلخ) والصور المتجهة (مثل SVG) عبر كائن الصورة المرفق بـ PictureFrame. عادةً ما تتداخل قائمة التنسيقات المدعومة مع إمكانيات محرك تحويل الشرائح والصور.
كيف سيؤثر إضافة عشرات الصور الكبيرة على حجم PPTX والأداء؟
تؤدي عملية تضمين صور كبيرة إلى زيادة حجم الملف واستهلاك الذاكرة؛ يساعد ربط الصور على تقليل حجم العرض التقديمي ولكن يتطلب بقاء الملفات الخارجية متاحة. يوفر Aspose.Slides إمكانية ربط الصور لتقليل حجم الملف.
كيف يمكنني قفل كائن الصورة لمنع تحريكه/تغيير حجمه عن طريق الخطأ؟
استخدم shape locks لـ PictureFrame (مثلاً، تعطيل التحريك أو تغيير الحجم). تم شرح آلية القفل للأشكال في مقالة الحماية وتدعم أنواعًا مختلفة من الأشكال، بما فيها PictureFrame.
هل يتم الحفاظ على دقة متجه SVG عند تصدير العرض التقديمي إلى PDF/صور؟
يسمح Aspose.Slides باستخراج SVG من PictureFrame كمتجه أصلي. عند التصدير إلى PDF أو إلى الصيغ النقطية، قد يتم تحويله إلى نقطة اعتمادًا على إعدادات التصدير؛ لكن وجود SVG الأصلي كمتجه يتم تأكيده بسلوك الاستخراج.