إطار الصورة
إطار الصورة هو شكل يحتوي على صورة—مثل صورة في إطار.
يمكنك إضافة صورة إلى الشريحة من خلال إطار الصورة. بهذه الطريقة، يمكنك تنسيق الصورة من خلال تنسيق إطار الصورة.
نصيحة
توفر Aspose محولات مجانية—JPEG إلى PowerPoint وPNG إلى PowerPoint—تتيح للناس إنشاء عروض تقديمية بسرعة من الصور.إنشاء إطار صورة
- أنشئ مثيل من فئة Presentation.
- احصل على مرجع الشريحة من خلال فهرسها.
- أنشئ كائن IPPImage عن طريق إضافة صورة إلى IImagescollection المرتبطة بكائن العرض الذي سيتم استخدامه لملء الشكل.
- حدد عرض وارتفاع الصورة.
- أنشئ PictureFrame بناءً على عرض وارتفاع الصورة من خلال طريقة
AddPictureFrame
المعروضة بواسطة كائن الشكل المرتبط بالشريحة المُرجعة. - أضف إطار صورة (يحتوي على الصورة) إلى الشريحة.
- اكتب العرض المعدل كملف PPTX.
يوضح هذا الكود بلغة C++ كيفية إنشاء إطار صورة:
// المسار إلى دليل المستندات.
const String outPath = u"../out/PictureFrameFormatting_out.pptx";
const String filePath = u"../templates/Tulips.jpg";
// تحميل العرض المطلوب
SharedPtr<Presentation> pres = MakeObject<Presentation>();
// الوصول إلى الشريحة الأولى
SharedPtr<ISlide> slide = pres->get_Slide(0);
// تحميل الصورة التي ستتم إضافتها إلى مجموعة الصور في العرض
// الحصول على الصورة
auto image = Images::FromFile(filePath);
// إضافة صورة إلى مجموعة الصور في العرض
SharedPtr<IPPImage> imgx = pres->get_Images()->AddImage(image);
// إضافة إطار صورة إلى الشريحة
SharedPtr<IPictureFrame> pf = slide->get_Shapes()->AddPictureFrame(ShapeType::Rectangle, 50, 50, 100, 100, imgx);
// تعيين قياس العرض والارتفاع النسبي
pf->set_RelativeScaleHeight(0.8);
pf->set_RelativeScaleWidth(1.35);
// تطبيق بعض التنسيق على إطار الصورة
pf->get_LineFormat()->get_FillFormat()->set_FillType(FillType::Solid);
pf->get_LineFormat()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Blue());
pf->get_LineFormat()->set_Width ( 20);
pf->set_Rotation( 45);
// كتابة ملف PPTX على القرص
pres->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptx);
إنشاء إطار صورة مع معدل قياس نسبي
من خلال تغيير قياس الصورة النسبي، يمكنك إنشاء إطار صورة أكثر تعقيدًا.
- أنشئ مثيل من فئة Presentation.
- احصل على مرجع الشريحة من خلال فهرسها.
- أضف صورة إلى مجموعة الصور في العرض.
- أنشئ كائن IPPImage عن طريق إضافة صورة إلى IImagescollection المرتبطة بكائن العرض الذي سيتم استخدامه لملء الشكل.
- حدد العرض والارتفاع النسبي للصورة في إطار الصورة.
- اكتب العرض المعدل كملف PPTX.
يوضح هذا الكود بلغة C++ كيفية إنشاء إطار صورة مع معدل قياس نسبي:
// المسار إلى دليل المستندات.
const String outPath = u"../out/AddRelativeScaleHeightPictureFrame_out.pptx";
const String filePath = u"../templates/Tulips.jpg";
// تحميل العرض المطلوب
SharedPtr<Presentation> pres = MakeObject<Presentation>();
// الوصول إلى الشريحة الأولى
SharedPtr<ISlide> slide = pres->get_Slide(0);
// تحميل الصورة التي سيتم إضافتها إلى مجموعة الصور في العرض
// الحصول على الصورة
auto image = Images::FromFile(filePath);
// إضافة صورة إلى مجموعة الصور في العرض
SharedPtr<IPPImage> imgx = pres->get_Images()->AddImage(image);
// إضافة إطار صورة إلى الشريحة
SharedPtr<IPictureFrame> pf = slide->get_Shapes()->AddPictureFrame(ShapeType::Rectangle, 50, 50, 100, 100, imgx);
// تعيين قياس العرض والارتفاع النسبي
pf->set_RelativeScaleHeight (0.8);
pf->set_RelativeScaleWidth(1.35);
// كتابة ملف PPTX على القرص
pres->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptx);
استخراج الصورة من إطار الصورة
يمكنك استخراج الصور من كائنات PictureFrame وحفظها في PNG وJPG وبتنسيقات أخرى. يوضح المثال البرمجي أدناه كيفية استخراج صورة من وثيقة “sample.pptx” وحفظها بتنسيق PNG.
auto presentation = MakeObject<Presentation>(u"sample.pptx");
auto firstSlide = presentation->get_Slide(0);
auto firstShape = firstSlide->get_Shape(0);
if (ObjectExt::Is<IPictureFrame>(firstShape))
{
auto pictureFrame = ExplicitCast<IPictureFrame>(firstShape);
auto image = pictureFrame->get_PictureFormat()->get_Picture()->get_Image()->get_SystemImage();
image->Save(u"slide_1_shape_1.png", ImageFormat::get_Png());
}
presentation->Dispose();
الحصول على شفافية الصورة
تسمح Aspose.Slides لك بالحصول على شفافية الصورة. يوضح هذا الكود بلغة C++ العملية:
auto presentation = System::MakeObject<Presentation>(u"Test.pptx");
auto pictureFrame = System::ExplicitCast<IPictureFrame>(presentation->get_Slide(0)->get_Shape(0));
auto imageTransform = pictureFrame->get_PictureFormat()->get_Picture()->get_ImageTransform();
for (auto&& effect : imageTransform)
{
if (System::ObjectExt::Is<IAlphaModulateFixed>(effect))
{
float transparencyValue = 100.0f - (System::ExplicitCast<IAlphaModulateFixed>(effect))->get_Amount();
System::Console::WriteLine(System::String(u"شفافية الصورة: ") + transparencyValue);
}
}
تنسيق إطار الصورة
توفر Aspose.Slides العديد من خيارات التنسيق التي يمكن تطبيقها على إطار الصورة. باستخدام تلك الخيارات، يمكنك تغيير إطار الصورة لجعله يتطابق مع متطلبات معينة.
- أنشئ مثيل من فئة Presentation.
- احصل على مرجع الشريحة من خلال فهرسها.
- أنشئ كائن IPPImage عن طريق إضافة صورة إلى IImagescollection المرتبطة بكائن العرض الذي سيتم استخدامه لملء الشكل.
- حدد عرض وارتفاع الصورة.
- أنشئ
PictureFrame
بناءً على عرض وارتفاع الصورة من خلال طريقة AddPictureFrame المعروضة بواسطة كائن IShapes المرتبط بالشريحة المُرجعة. - أضف إطار الصورة (الذي يحتوي على الصورة) إلى الشريحة.
- قم بتعيين لون خط إطار الصورة.
- قم بتعيين عرض خط إطار الصورة.
- قم بتدوير إطار الصورة عن طريق إعطائه قيمة إيجابية أو سلبية.
- القيمة الإيجابية تدور الصورة في اتجاه عقارب الساعة.
- القيمة السلبية تدور الصورة في عكس اتجاه عقارب الساعة.
- أضف إطار الصورة (الذي يحتوي على الصورة) إلى الشريحة.
- اكتب العرض المعدل كملف PPTX.
يوضح هذا الكود بلغة C++ عملية تنسيق إطار الصورة:
// المسار إلى دليل المستندات.
const String outPath = u"../out/AddRelativeScaleHeightPictureFrame_out.pptx";
const String filePath = u"../templates/Tulips.jpg";
// تحميل العرض المطلوب
SharedPtr<Presentation> pres = MakeObject<Presentation>();
// الوصول إلى الشريحة الأولى
SharedPtr<ISlide> slide = pres->get_Slides()->idx_get(0);
// تحميل الصورة التي سيتم إضافتها إلى مجموعة الصور في العرض
// الحصول على الصورة
auto image = Images::FromFile(filePath);
// إضافة صورة إلى مجموعة الصور في العرض
SharedPtr<IPPImage> imgx = pres->get_Images()->AddImage(image);
// إضافة إطار صورة إلى الشريحة
SharedPtr<IPictureFrame> pf = slide->get_Shapes()->AddPictureFrame(ShapeType::Rectangle, 50, 50, 100, 100, imgx);
// تعيين قياس العرض والارتفاع النسبي
pf->set_RelativeScaleHeight (0.8);
pf->set_RelativeScaleWidth(1.35);
// كتابة ملف PPTX على القرص
pres->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptx);
نصيحة
طورت Aspose مؤخرًا صانع الكولاج المجاني. إذا كنت بحاجة إلى دمج JPG/JPEG أو صور PNG، أو إنشاء شبكات من الصور، يمكنك استخدام هذه الخدمة.إضافة صورة كارتباط
لتجنب أحجام العرض الكبيرة، يمكنك إضافة الصور (أو مقاطع الفيديو) من خلال روابط بدلاً من تضمين الملفات مباشرة في العروض. يوضح هذا الكود بلغة C++ كيفية إضافة صورة وفيديو إلى عنصر نائب:
auto presentation = System::MakeObject<Presentation>(u"input.pptx");
auto shapesToRemove = System::MakeObject<System::Collections::Generic::List<System::SharedPtr<IShape>>>();
auto shapes = presentation->get_Slides()->idx_get(0)->get_Shapes();
for (auto& autoShape : shapes)
{
if (autoShape->get_Placeholder() == nullptr)
continue;
switch (autoShape->get_Placeholder()->get_Type())
{
case Aspose::Slides::PlaceholderType::Picture:
{
auto pictureFrame = shapes->AddPictureFrame(Aspose::Slides::ShapeType::Rectangle, autoShape->get_X(), autoShape->get_Y(), autoShape->get_Width(), autoShape->get_Height(), nullptr);
pictureFrame->get_PictureFormat()->get_Picture()->set_LinkPathLong(u"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 Aspose::Slides::PlaceholderType::Media:
{
auto videoFrame = shapes->AddVideoFrame(autoShape->get_X(), autoShape->get_Y(), autoShape->get_Width(), autoShape->get_Height(), u"");
videoFrame->get_PictureFormat()->get_Picture()->set_LinkPathLong(u"https://upload.wikimedia.org/wikipedia/commons/3/3a/I.M_at_Old_School_Public_Broadcasting_in_October_2016_02.jpg");
videoFrame->set_LinkPathLong(u"https://youtu.be/t_1LYZ102RA");
shapesToRemove->Add(autoShape);
break;
}
}
}
for (auto& shape : shapesToRemove)
{
shapes->Remove(shape);
}
presentation->Save(u"output.pptx", Aspose::Slides::Export::SaveFormat::Pptx);
قص الصورة
يوضح هذا الكود بلغة C++ كيفية قص صورة موجودة على شريحة:
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System::Drawing;
auto presentation = System::MakeObject<Presentation>();
// إنشاء كائن صورة جديد
auto newImage = presentation->get_Images()->AddImage(Images::FromFile(imagePath));
// إضافة إطار صورة إلى الشريحة
auto picFrame = presentation->get_Slides()->idx_get(0)->get_Shapes()->AddPictureFrame(Aspose::Slides::ShapeType::Rectangle, 100.0f, 100.0f, 420.0f, 250.0f, newImage);
// قص الصورة (قيم النسبة المئوية)
picFrame->get_PictureFormat()->set_CropLeft(23.6f);
picFrame->get_PictureFormat()->set_CropRight(21.5f);
picFrame->get_PictureFormat()->set_CropTop(3.0f);
picFrame->get_PictureFormat()->set_CropBottom(31.0f);
// حفظ النتيجة
presentation->Save(outPptxFile, Aspose::Slides::Export::SaveFormat::Pptx);
حذف المناطق المقصوصة من الصورة
إذا كنت ترغب في حذف المناطق المقصوصة من صورة موجودة في إطار، يمكنك استخدام طريقة IPictureFillFormat::DeletePictureCroppedAreas(). تقوم هذه الطريقة بإرجاع الصورة المقصوصة أو الصورة الأصلية إذا كان القص غير ضروري.
يوضح هذا الكود بلغة C++ العملية:
System::SharedPtr<Presentation> presentation = System::MakeObject<Presentation>(u"PictureFrameCrop.pptx");
System::SharedPtr<ISlide> slide = presentation->get_Slide(0);
// الحصول على إطار الصورة من الشريحة الأولى
System::SharedPtr<IPictureFrame> picFrame = System::AsCast<IPictureFrame>(slide->get_Shape(0));
// حذف المناطق المقصوصة من صورة إطار الصورة وإرجاع الصورة المقصوصة
System::SharedPtr<IPPImage> croppedImage = picFrame->get_PictureFormat()->DeletePictureCroppedAreas();
// حفظ النتيجة
presentation->Save(u"PictureFrameDeleteCroppedAreas.pptx", SaveFormat::Pptx);
ملاحظة
تضيف طريقة IPictureFillFormat::DeletePictureCroppedAreas() الصورة المقصوصة إلى مجموعة صور العرض. إذا كانت الصورة مستخدمة فقط في PictureFrame المعالجة، فإن هذا الإعداد يمكن أن يقلل من حجم العرض. خلاف ذلك، سيزداد عدد الصور في العرض الناتج.
تحول هذه الطريقة ملفات WMF/EMF المتجهة إلى صورة PNG نقطية أثناء عملية القص.
قفل نسبة الأبعاد
إذا كنت ترغب في الحفاظ على الشكل الذي يحتوي على صورة على نسبة أبعاده حتى بعد تغيير أبعاد الصورة، يمكنك استخدام طريقة set_AspectRatioLocked() لتعيين إعداد قفل نسبة الأبعاد.
يوضح هذا الكود بلغة C++ كيفية قفل نسبة أبعاد الشكل:
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"pres.pptx");
System::SharedPtr<ILayoutSlide> layout = pres->get_LayoutSlides()->GetByType(SlideLayoutType::Custom);
System::SharedPtr<ISlide> emptySlide = pres->get_Slides()->AddEmptySlide(layout);
System::SharedPtr<IImage> image = Images::FromFile(u"image.png");
System::SharedPtr<IPPImage> presImage = pres->get_Images()->AddImage(image);
System::SharedPtr<IPictureFrame> pictureFrame = emptySlide->get_Shapes()->AddPictureFrame(ShapeType::Rectangle, 50.0f, 150.0f, static_cast<float>(presImage->get_Width()), static_cast<float>(presImage->get_Height()), presImage);
// جعل الشكل يحتفظ بنسبة الأبعاد عند تغيير الحجم
pictureFrame->get_PictureFrameLock()->set_AspectRatioLocked(true);
ملاحظة
يحافظ إعداد قفل نسبة الأبعاد فقط على نسبة الأبعاد للشكل وليس الصورة التي يحتوي عليها.استخدام خاصية StretchOff
باستخدام خصائص StretchOffsetLeft، StretchOffsetTop، StretchOffsetRight وStretchOffsetBottom من واجهة IPictureFillFormat وفئة PictureFillFormat، يمكنك تحديد مستطيل التعبئة.
عند تحديد تمدد للصورة، يتم تعديل مستطيل المصدر ليتناسب مع مستطيل التعبئة المحدد. يتم تعريف كل حافة من مستطيل التعبئة بواسطة نسبة مئوية من الحافة المقابلة لصندوق الحدود الخاص بالشكل. تحدد النسبة المئوية الإيجابية إدخال. تحدد النسبة المئوية السلبية إدخال للخارج.
- أنشئ مثيل من فئة Presentation.
- احصل على مرجع الشريحة من خلال فهرسها.
- أضف شكل مستطيل.
- أنشئ صورة.
- حدد نوع تعبئة الشكل.
- حدد وضع تعبئة الصورة للشكل.
- أضف صورة محددة لملء الشكل.
- حدد إزاحات الصورة من الحافة المقابلة لصندوق الحدود الخاص بالشكل.
- اكتب العرض المعدل كملف PPTX.
يوضح هذا الكود بلغة C++ عملية يتم فيها استخدام خاصية StretchOff:
auto pres = System::MakeObject<Presentation>();
auto ppImage = pres->get_Images()->AddImage(Images::FromFile(u"image.png"));
auto slide = pres->get_Slide(0);
auto pictureFrame = slide->get_Shapes()->AddPictureFrame(ShapeType::Rectangle, 10.0f, 10.0f, 400.0f, 400.0f, ppImage);
// تعيين الصورة لتتمدد من كل جانب داخل جسم الشكل
auto pictureFormat = pictureFrame->get_PictureFormat();
pictureFormat->set_PictureFillMode(PictureFillMode::Stretch);
pictureFormat->set_StretchOffsetLeft(24.0f);
pictureFormat->set_StretchOffsetRight(24.0f);
pictureFormat->set_StretchOffsetTop(24.0f);
pictureFormat->set_StretchOffsetBottom(24.0f);
pres->Save(u"imageStretch.pptx", SaveFormat::Pptx);