إدارة إطارات الصور في العروض التقديمية باستخدام PHP
إطار الصورة هو شكل يحتوي على صورة — إنه يشبه الصورة داخل إطار.
يمكنك إضافة صورة إلى شريحة عبر إطار صورة. بهذه الطريقة، يمكنك تنسيق الصورة من خلال تنسيق إطار الصورة.
Tip
توفر Aspose محولات مجانية —JPEG إلى PowerPoint وPNG إلى PowerPoint— تسمح للناس بإنشاء عروض تقديمية بسرعة من الصور.Create a Picture Frame
- إنشاء كائن من الفئة Presentation.
- الحصول على مرجع الشريحة عبر فهرسها.
- إنشاء كائن IPPImage بإضافة صورة إلى مجموعة IImagescollection المرتبطة بكائن العرض الذي سيُستخدم لملء الشكل.
- تحديد عرض الصورة وارتفاعها.
- إنشاء كائن PictureFrame بناءً على عرض الصورة وارتفاعها عبر طريقة
AddPictureFrameالتي يوفرها كائن الشكل المرتبط بالشريحة المشار إليها. - إضافة إطار الصورة (الذي يحتوي على الصورة) إلى الشريحة.
- كتابة العرض المعدل كملف PPTX.
هذا الكود PHP يوضح كيفية إنشاء إطار صورة:
# ينشئ كائن الفئة Presentation الذي يمثل ملف PPTX
$pres = new Presentation();
try {
# يحصل على الشريحة الأولى
$sld = $pres->getSlides()->get_Item(0);
# ينشئ كائن الفئة Image
$imgx = $pres->getImages()->addImage(new Java("java.io.FileInputStream", new Java("java.io.File", "asp1.jpg")));
# يضيف إطار صورة بنفس ارتفاع وعرض الصورة
$sld->getShapes()->addPictureFrame(ShapeType::Rectangle, 50, 150, $imgx->getWidth(), $imgx->getHeight(), $imgx);
# يكتب ملف PPTX إلى القرص
$pres->save("RectPicFrame.pptx", SaveFormat::Pptx);
} catch (JavaException $e) {
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Create a Picture Frame with Relative Scale
بتعديل مقياس الصورة النسبي، يمكنك إنشاء إطار صورة أكثر تعقيدًا.
- إنشاء كائن من الفئة Presentation.
- الحصول على مرجع الشريحة عبر فهرسها.
- إضافة صورة إلى مجموعة صور العرض.
- إنشاء كائن IPPImage بإضافة صورة إلى مجموعة IImagescollection المرتبطة بكائن العرض الذي سيُستخدم لملء الشكل.
- تحديد العرض والارتفاع النسبيين للصورة داخل إطار الصورة.
- كتابة العرض المعدل كملف PPTX.
هذا الكود PHP يوضح كيفية إنشاء إطار صورة بمقياس نسبي:
# إنشاء كائن الفئة Presentation الذي يمثل ملف PPTX
$pres = new Presentation();
try {
# الحصول على الشريحة الأولى
$sld = $pres->getSlides()->get_Item(0);
# إنشاء كائن الفئة Image
$imgx = $pres->getImages()->addImage(new Java("java.io.FileInputStream", new Java("java.io.File", "asp1.jpg")));
# إضافة إطار صورة مع ارتفاع وعرض يساويان الصورة
$pf = $sld->getShapes()->addPictureFrame(ShapeType::Rectangle, 50, 150, $imgx->getWidth(), $imgx->getHeight(), $imgx);
# ضبط مقياس العرض والارتفاع النسبي
$pf->setRelativeScaleHeight(0.8);
$pf->setRelativeScaleWidth(1.35);
# كتابة ملف PPTX إلى القرص
$pres->save("RectPicFrame.pptx", SaveFormat::Pptx);
} catch (JavaException $e) {
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Extract Raster Images from Picture Frames
يمكنك استخراج الصور النقطية من كائنات PictureFrame وحفظها بتنسيقات PNG، JPG وغيرها. يوضح المثال البرمجي أدناه كيفية استخراج صورة من المستند “sample.pptx” وحفظها بتنسيق PNG.
$presentation = new Presentation("sample.pptx");
try {
$firstSlide = $presentation->getSlides()->get_Item(0);
$firstShape = $firstSlide->getShapes()->get_Item(0);
if (java_instanceof($firstShape, new JavaClass("com.aspose.slides.PictureFrame"))) {
$pictureFrame = $firstShape;
try {
$slideImage = $pictureFrame->getPictureFormat()->getPicture()->getImage()->getImage();
$slideImage->save("slide_1_shape_1.png", ImageFormat::Png);
} finally {
if (!java_is_null($slideImage)) {
$slideImage->dispose();
}
}
}
} catch (JavaException $e) {
} finally {
$presentation->dispose();
}
Extract SVG Images from Picture Frames
عندما يحتوي عرض تقديمي على رسومات SVG موضوعة داخل أشكال PictureFrame، يتيح Aspose.Slides for PHP via Java استرجاع الصور المتجهة الأصلية بجودة كاملة. من خلال استعراض مجموعة أشكال الشريحة، يمكنك تحديد كل PictureFrame، والتحقق مما إذا كان PPImage يحمل محتوى SVG، ثم حفظ تلك الصورة إلى القرص أو إلى تيار بصيغتها الأصلية SVG.
الكود التالي يوضح كيفية استخراج صورة SVG من إطار صورة:
$presentation = new Presentation("sample.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$shape = $slide->getShapes()->get_Item(0);
if (java_instanceof($shape, new JavaClass("com.aspose.slides.PictureFrame"))) {
$svgImage = $shape->getPictureFormat()->getPicture()->getImage()->getSvgImage();
if ($svgImage !== null) {
file_put_contents("output.svg", $svgImage->getSvgData());
}
}
} finally {
$presentation->dispose();
}
Get Transparency of an Image
تتيح Aspose.Slides الحصول على تأثير الشفافية المطبق على صورة. يوضح هذا الكود PHP العملية:
$presentation = new Presentation("Test.pptx");
$pictureFrame = $presentation->getSlides()->get_Item(0)->getShapes()->get_Item(0);
$imageTransform = $pictureFrame->getPictureFormat()->getPicture()->getImageTransform();
foreach($imageTransform as $effect) {
if (java_instanceof($effect, new JavaClass("com.aspose.slides.AlphaModulateFixed"))) {
$alphaModulateFixed = $effect;
$transparencyValue = 100 - $alphaModulateFixed->getAmount();
echo("Picture transparency: " . $transparencyValue);
}
}
Picture Frame Formatting
توفر Aspose.Slides العديد من خيارات التنسيق التي يمكن تطبيقها على إطار صورة. باستخدام هذه الخيارات، يمكنك تعديل إطار الصورة ليتطابق مع المتطلبات المحددة.
- إنشاء كائن من الفئة Presentation.
- الحصول على مرجع الشريحة عبر فهرسها.
- إنشاء كائن IPPImage بإضافة صورة إلى مجموعة IImagescollection المرتبطة بكائن العرض الذي سيُستخدم لملء الشكل.
- تحديد عرض الصورة وارتفاعها.
- إنشاء كائن
PictureFrameبناءً على عرض الصورة وارتفاعها عبر طريقة AddPictureFrame التي يوفرها كائن IShapes المرتبط بالشريحة المشار إليها. - إضافة إطار الصورة (الذي يحتوي على الصورة) إلى الشريحة.
- ضبط لون خط إطار الصورة.
- ضبط عرض خط إطار الصورة.
- تدوير إطار الصورة إما بقيمة موجبة أو سالبة.
- القيمة الموجبة تدور الصورة باتجاه عقارب الساعة.
- القيمة السالبة تدور الصورة عكس اتجاه عقارب الساعة.
- إضافة إطار الصورة (الذي يحتوي على الصورة) إلى الشريحة مرة أخرى.
- كتابة العرض المعدل كملف PPTX.
هذا الكود PHP يوضح عملية تنسيق إطار الصورة:
# ينشئ كائن الفئة Presentation الذي يمثل ملف PPTX
$pres = new Presentation();
try {
# يحصل على الشريحة الأولى
$sld = $pres->getSlides()->get_Item(0);
# ينشئ كائن الفئة Image
$imgx = $pres->getImages()->addImage(new Java("java.io.FileInputStream", new Java("java.io.File", "asp1.jpg")));
# يضيف إطار صورة بارتفاع وعرض يساويان الصورة
$pf = $sld->getShapes()->addPictureFrame(ShapeType::Rectangle, 50, 150, $imgx->getWidth(), $imgx->getHeight(), $imgx);
# يطبق بعض التنسيقات على PictureFrameEx
$pf->getLineFormat()->getFillFormat()->setFillType(FillType::Solid);
$pf->getLineFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLUE);
$pf->getLineFormat()->setWidth(20);
$pf->setRotation(45);
# يكتب ملف PPTX إلى القرص
$pres->save("RectPicFrame.pptx", SaveFormat::Pptx);
} catch (JavaException $e) {
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Tip
طورت Aspose مؤخرًا أداة free Collage Maker مجانًا. إذا احتجت إلى دمج صور JPG/JPEG أو PNG، أو إنشاء شبكات من الصور، يمكنك استخدام هذه الخدمة.Add an Image as a Link
لتقليل حجم العروض التقديمية الكبيرة، يمكنك إضافة الصور (أو الفيديوهات) عبر روابط بدلاً من تضمين الملفات مباشرةً في العروض. يوضح هذا الكود PHP كيفية إضافة صورة وفيديو إلى عنصر نائب:
$presentation = new Presentation("input.pptx");
try {
$shapesToRemove = new Java("java.util.ArrayList");
$shapesCount = $presentation->getSlides()->get_Item(0)->getShapes()->size();
for($i = 0; $i < java_values($shapesCount) ; $i++) {
$autoShape = $presentation->getSlides()->get_Item(0)->getShapes()->get_Item($i);
if (java_is_null($autoShape->getPlaceholder())) {
continue;
}
switch ($autoShape->getPlaceholder()->getType()) {
case PlaceholderType::Picture :
$pictureFrame = $presentation->getSlides()->get_Item(0)->getShapes()->addPictureFrame(ShapeType::Rectangle, $autoShape->getX(), $autoShape->getY(), $autoShape->getWidth(), $autoShape->getHeight(), null);
$pictureFrame->getPictureFormat()->getPicture()->setLinkPathLong("https://upload.wikimedia.org/wikipedia/commons/3/3a/I.M_at_Old_School_Public_Broadcasting_in_October_2016_02.jpg");
$shapesToRemove->add($autoShape);
break;
case PlaceholderType::Media :
$videoFrame = $presentation->getSlides()->get_Item(0)->getShapes()->addVideoFrame($autoShape->getX(), $autoShape->getY(), $autoShape->getWidth(), $autoShape->getHeight(), "");
$videoFrame->getPictureFormat()->getPicture()->setLinkPathLong("https://upload.wikimedia.org/wikipedia/commons/3/3a/I.M_at_Old_School_Public_Broadcasting_in_October_2016_02.jpg");
$videoFrame->setLinkPathLong("https://youtu.be/t_1LYZ102RA");
$shapesToRemove->add($autoShape);
break;
}
}
foreach($shapesToRemove as $shape) {
$presentation->getSlides()->get_Item(0)->getShapes()->remove($shape);
}
$presentation->save("output.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($presentation)) {
$presentation->dispose();
}
}
Crop Images
يظهر هذا الكود PHP كيفية قص صورة موجودة على شريحة:
$pres = new Presentation();
# ينشئ كائن صورة جديد
try {
$picture;
$image = Images->fromFile($imagePath);
try {
$picture = $pres->getImages()->addImage($image);
} finally {
if (!java_is_null($image)) {
$image->dispose();
}
}
# يضيف إطار صورة إلى شريحة
$picFrame = $pres->getSlides()->get_Item(0)->getShapes()->addPictureFrame(ShapeType::Rectangle, 100, 100, 420, 250, $picture);
# يقتطع الصورة (قيم النسبة المئوية)
$picFrame->getPictureFormat()->setCropLeft(23.6);
$picFrame->getPictureFormat()->setCropRight(21.5);
$picFrame->getPictureFormat()->setCropTop(3);
$picFrame->getPictureFormat()->setCropBottom(31);
# يحفظ النتيجة
$pres->save($outPptxFile, SaveFormat::Pptx);
} catch (JavaException $e) {
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Delete Cropped Areas of a Picture
إذا رغبت بحذف المناطق المقطوعة من صورة موجودة داخل إطار، يمكنك استخدام طريقة deletePictureCroppedAreas() . تُعيد هذه الطريقة الصورة المقطوعة أو الصورة الأصلية إذا لم يكن هناك حاجة للقص.
هذا الكود PHP يوضح العملية:
$presentation = new Presentation("PictureFrameCrop.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
# يحصل على إطار الصورة من الشريحة الأولى
$picFrame = $slide->getShapes()->get_Item(0);
# يحذف مناطق القص من صورة إطار الصورة ويعيد الصورة المقصوصة
$croppedImage = $picFrame->getPictureFormat()->deletePictureCroppedAreas();
# يحفظ النتيجة
$presentation->save("PictureFrameDeleteCroppedAreas.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($presentation)) {
$presentation->dispose();
}
}
NOTE
تضيف طريقة deletePictureCroppedAreas() الصورة المقطوعة إلى مجموعة صور العرض. إذا كانت الصورة تُستخدم فقط في PictureFrame المعالج، يمكن لهذا الإعداد تقليل حجم العرض. وإلا، سيزداد عدد الصور في العرض الناتج.
تحول هذه الطريقة ملفات WMF/EMF إلى صورة PNG نقطية أثناء عملية القص.
Lock Aspect Ratio
إذا رغبت في أن يحتفظ الشكل الذي يحتوي على صورة بنسبة أبعاده حتى بعد تغيير أبعاد الصورة، يمكنك استخدام طريقة setAspectRatioLocked لضبط إعداد قفل نسبة الأبعاد.
هذا الكود PHP يوضح كيفية قفل نسبة أبعاد الشكل:
$pres = new Presentation("pres.pptx");
try {
$layout = $pres->getLayoutSlides()->getByType(SlideLayoutType::Custom);
$emptySlide = $pres->getSlides()->addEmptySlide($layout);
$picture;
$image = Images->fromFile("image.png");
try {
$picture = $pres->getImages()->addImage($image);
} finally {
if (!java_is_null($image)) {
$image->dispose();
}
}
$pictureFrame = $emptySlide->getShapes()->addPictureFrame(ShapeType::Rectangle, 50, 150, $presImage->getWidth(), $presImage->getHeight(), $picture);
# تعيين الشكل للحفاظ على نسبة الأبعاد عند تغيير الحجم
$pictureFrame->getPictureFrameLock()->setAspectRatioLocked(true);
} catch (JavaException $e) {
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
NOTE
يُحافظ إعداد قفل نسبة الأبعاد فقط على نسبة أبعاد الشكل وليس على الصورة التي يحتويها.Use the StretchOff Property
باستخدام خصائص StretchOffsetLeft، StretchOffsetTop، StretchOffsetRight وStretchOffsetBottom من واجهة IPictureFillFormat وفئة PictureFillFormat، يمكنك تحديد مستطيل ملء.
عند تحديد تمديد الصورة، يتم تحجيم المستطيل المصدر ليتناسب مع مستطيل الملء المحدد. كل حافة من حواف مستطيل الملء تُعرَّف بنسبة مئوية تُقاس من الحافة المقابلة لصندوق حدود الشكل. النسبة المئوية الموجبة تُحدِّد تقليصًا، والسالبة تُحدِّد توسعًا.
- إنشاء كائن من الفئة Presentation.
- الحصول على مرجع الشريحة عبر فهرسها.
- إضافة شكل مستطيل
AutoShape. - إنشاء صورة.
- تعيين نوع ملء الشكل.
- تعيين وضع ملء صورة الشكل.
- إضافة صورة للملء داخل الشكل.
- تحديد إزاحات الصورة من الحافة المقابلة لصندوق حدود الشكل.
- كتابة العرض المعدل كملف PPTX.
هذا الكود PHP يوضح عملية استخدام خاصية StretchOff:
# ينشئ فئة Presentation التي تمثل ملف PPTX
$pres = new Presentation();
try {
# يحصل على الشريحة الأولى
$slide = $pres->getSlides()->get_Item(0);
# ينشئ كائن فئة ImageEx
$picture;
$image = Images->fromFile("aspose-logo.jpg");
try {
$picture = $pres->getImages()->addImage($image);
} finally {
if (!java_is_null($image)) {
$image->dispose();
}
}
# يضيف AutoShape مضبوطة على المستطيل
$aShape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 100, 100, 300, 300);
# يحدد نوع التعبئة للشكل
$aShape->getFillFormat()->setFillType(FillType::Picture);
# يحدد وضع تعبئة الصورة للشكل
$aShape->getFillFormat()->getPictureFillFormat()->setPictureFillMode(PictureFillMode->Stretch);
# يحدد الصورة لملء الشكل
$aShape->getFillFormat()->getPictureFillFormat()->getPicture()->setImage($picture);
# يحدد إزاحات الصورة من الحافة المقابلة لصندوق حدود الشكل
$aShape->getFillFormat()->getPictureFillFormat()->setStretchOffsetLeft(25);
$aShape->getFillFormat()->getPictureFillFormat()->setStretchOffsetRight(25);
$aShape->getFillFormat()->getPictureFillFormat()->setStretchOffsetTop(-20);
$aShape->getFillFormat()->getPictureFillFormat()->setStretchOffsetBottom(-10);
# يكتب ملف PPTX إلى القرص
$pres->save("StretchOffsetLeftForPictureFrame_out.pptx", SaveFormat::Pptx);
} catch (JavaException $e) {
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
FAQ
كيف يمكنني معرفة تنسيقات الصور المدعومة لإطار الصورة؟
يدعم Aspose.Slides كلًا من الصور النقطية (PNG، JPEG، BMP، GIF، إلخ) والصور المتجهة (مثل SVG) عبر كائن الصورة المعيّن إلى PictureFrame. عادةً ما تتقاطع قائمة التنسيقات المدعومة مع قدرات محرك تحويل الشرائح والصور.
كيف سيؤثر إضافة العشرات من الصور الكبيرة على حجم PPTX وأدائه؟
تزيد تضمين الصور الكبيرة من حجم الملف واستهلاك الذاكرة؛ وربط الصور يقلل من حجم العرض لكنه يتطلب بقاء الملفات الخارجية متاحة. توفر Aspose.Slides إمكانية إضافة الصور عبر الروابط لتقليل حجم الملف.
كيف يمكنني قفل كائن الصورة لمنعه من التحرك/تغيير الحجم عن طريق الخطأ؟
استخدم قفل الأشكال لـ PictureFrame (مثلاً، تعطيل التحريك أو تغيير الحجم). تُشرح آلية القفل للأشكال في مقالة الحماية وتُدعم لأنواع متعددة من الأشكال بما فيها PictureFrame.
هل يتم الحفاظ على جودة المتجهات SVG عند تصدير العرض إلى PDF/صور؟
يسمح Aspose.Slides باستخراج SVG من PictureFrame كمتجه أصلي. عند التصدير إلى PDF أو التنسيقات النقطية، قد يتم تحويله إلى نقطي حسب إعدادات التصدير؛ ومع ذلك، يظل الـ SVG الأصلي محفوظًا كمتجه حسب سلوك الاستخراج.