إدارة إطارات الصور في العروض التقديمية على Android
إطار الصورة هو شكل يحتوي على صورة — إنه مشابه لصورة داخل إطار.
يمكنك إضافة صورة إلى شريحة عبر إطار صورة. بهذه الطريقة، يمكنك تنسيق الصورة عن طريق تنسيق إطار الصورة.
نصيحة
توفر Aspose محولات مجانية —JPEG إلى PowerPoint وPNG إلى PowerPoint— تتيح للمستخدمين إنشاء عروض تقديمية بسرعة من الصور.إنشاء إطار صورة
- إنشاء مثال من فئة Presentation.
- الحصول على مرجع الشريحة من خلال فهرستها.
- إنشاء كائن IPPImage بإضافة صورة إلى IImagescollection المرتبط بكائن العرض الذي سيُستخدم لملء الشكل.
- تحديد عرض وارتفاع الصورة.
- إنشاء PictureFrame بناءً على عرض وارتفاع الصورة عبر طريقة
AddPictureFrameالتي يقدمها كائن الشكل المرتبط بالشريحة المرجعية. - إضافة إطار صورة (المحتوي على الصورة) إلى الشريحة.
- كتابة العرض المعدل كملف PPTX.
هذا الكود Java يوضح لك كيفية إنشاء إطار صورة:
// ينشئ كائن من فئة Presentation التي تمثل ملف PPTX
Presentation pres = new Presentation();
try {
// يحصل على الشريحة الأولى
ISlide sld = pres.getSlides().get_Item(0);
// ينشئ كائن من فئة Image
IPPImage imgx = pres.getImages().addImage(new FileInputStream(new File("asp1.jpg")));
// يضيف إطار صورة بالارتفاع والعرض المطابقين للصورة
sld.getShapes().addPictureFrame(ShapeType.Rectangle, 50, 150, imgx.getWidth(), imgx.getHeight(), imgx);
// يكتب ملف PPTX إلى القرص
pres.save("RectPicFrame.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
إنشاء إطار صورة بمقياس نسبي
من خلال تعديل مقياس الصورة النسبي، يمكنك إنشاء إطار صورة أكثر تعقيدًا.
- إنشاء مثال من فئة Presentation.
- الحصول على مرجع الشريحة من خلال فهرستها.
- إضافة صورة إلى مجموعة صور العرض.
- إنشاء كائن IPPImage بإضافة صورة إلى IImagescollection المرتبط بكائن العرض الذي سيُستخدم لملء الشكل.
- تحديد العرض والارتفاع النسبيين للصورة في إطار الصورة.
- كتابة العرض المعدل كملف PPTX.
هذا الكود Java يوضح لك كيفية إنشاء إطار صورة بمقياس نسبي:
// إنشاء فئة Presentation التي تمثل ملف PPTX
Presentation pres = new Presentation();
try {
// الحصول على الشريحة الأولى
ISlide sld = pres.getSlides().get_Item(0);
// إنشاء فئة Image
IPPImage imgx = pres.getImages().addImage(new FileInputStream(new File("asp1.jpg")));
// إضافة إطار صورة بالارتفاع والعرض المتطابقين للصورة
IPictureFrame pf = sld.getShapes().addPictureFrame(ShapeType.Rectangle, 50, 150, imgx.getWidth(), imgx.getHeight(), imgx);
// تعيين النسبة النسبية للعرض والارتفاع
pf.setRelativeScaleHeight(0.8f);
pf.setRelativeScaleWidth(1.35f);
// حفظ ملف PPTX إلى القرص
pres.save("RectPicFrame.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
استخراج الصور النقطية من إطارات الصور
يمكنك استخراج الصور النقطية من كائنات PictureFrame وحفظها بصيغ PNG وJPG وغيرها. يوضح المثال البرمجي أدناه كيفية استخراج صورة من المستند “sample.pptx” وحفظها بصيغة PNG.
Presentation presentation = new Presentation("sample.pptx");
try {
ISlide firstSlide = presentation.getSlides().get_Item(0);
IShape firstShape = firstSlide.getShapes().get_Item(0);
if (firstShape instanceof IPictureFrame) {
IPictureFrame pictureFrame = (IPictureFrame) firstShape;
try {
IImage slideImage = pictureFrame.getPictureFormat().getPicture().getImage().getImage();
slideImage.save("slide_1_shape_1.png", ImageFormat.Png);
} finally {
if (slideImage != null) slideImage.dispose();
}
}
} catch (IOException e) {
} finally {
presentation.dispose();
}
استخراج صور SVG من إطارات الصور
عندما يحتوي العرض على رسومات SVG موضوعة داخل أشكال PictureFrame، يتيح Aspose.Slides للـ Android عبر Java استرداد الصور المتجهة الأصلية بجودة كاملة. من خلال استعراض مجموعة أشكال الشريحة، يمكنك التعرف على كل PictureFrame، والتحقق ما إذا كان IPPImage الأساسي يحتوي على محتوى SVG، ثم حفظ تلك الصورة إلى قرص أو تدفق بصيغتها الأصلية SVG.
الكود التالي يوضح كيفية استخراج صورة SVG من إطار صورة:
Presentation presentation = new Presentation("sample.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IShape shape = slide.getShapes().get_Item(0);
if (shape instanceof IPictureFrame) {
IPictureFrame pictureFrame = (IPictureFrame) shape;
ISvgImage svgImage = pictureFrame.getPictureFormat().getPicture().getImage().getSvgImage();
FileOutputStream fos = new FileOutputStream("output.svg");
fos.write(svgImage.getSvgData());
fos.close();
}
} catch (IOException e) {
System.out.println(e.getMessage());
} finally {
presentation.dispose();
}
获取图像的透明度 (Keep original? This line is English/Chinese, translate to Arabic)
الحصول على شفافية الصورة
يسمح Aspose.Slides لك باستخراج تأثير الشفافية المطبق على صورة. يوضح هذا الكود Java العملية:
Presentation presentation = new Presentation("Test.pptx");
var pictureFrame = (IPictureFrame) presentation.getSlides().get_Item(0).getShapes().get_Item(0);
var imageTransform = pictureFrame.getPictureFormat().getPicture().getImageTransform();
for (var effect : imageTransform) {
if (effect instanceof IAlphaModulateFixed) {
var alphaModulateFixed = (IAlphaModulateFixed) effect;
var transparencyValue = 100 - alphaModulateFixed.getAmount();
System.out.println("Picture transparency: " + transparencyValue);
}
}
تنسيق إطار الصورة
يوفر Aspose.Slides العديد من خيارات التنسيق التي يمكن تطبيقها على إطار الصورة. باستخدام هذه الخيارات، يمكنك تعديل إطار الصورة ليتطابق مع المتطلبات المحددة.
- إنشاء مثال من فئة Presentation.
- الحصول على مرجع الشريحة من خلال فهرستها.
- إنشاء كائن IPPImage بإضافة صورة إلى IImagescollection المرتبط بكائن العرض الذي سيُستخدم لملء الشكل.
- تحديد عرض وارتفاع الصورة.
- إنشاء
PictureFrameبناءً على عرض وارتفاع الصورة عبر طريقة AddPictureFrame التي يقدمها كائن IShapes المرتبط بالشريحة المرجعية. - إضافة إطار الصورة (المحتوي على الصورة) إلى الشريحة.
- ضبط لون حد إطار الصورة.
- ضبط عرض حد إطار الصورة.
- تدوير إطار الصورة بإعطائه قيمة إيجابية أو سلبية.
- القيمة الإيجابية تدير الصورة مع اتجاه عقارب الساعة.
- القيمة السلبية تدير الصورة عكس اتجاه عقارب الساعة.
- إضافة إطار الصورة (المحتوي على الصورة) إلى الشريحة.
- كتابة العرض المعدل كملف PPTX.
هذا الكود Java يوضح عملية تنسيق إطار الصورة:
// ينشئ كائن من فئة Presentation التي تمثل ملف PPTX
Presentation pres = new Presentation();
try {
// يحصل على الشريحة الأولى
ISlide sld = pres.getSlides().get_Item(0);
// ينشئ كائن من فئة Image
IPPImage imgx = pres.getImages().addImage(new FileInputStream(new File("asp1.jpg")));
// يضيف إطار صورة بارتفاع وعرض يساوي الصورة
IPictureFrame 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(Color.BLUE);
pf.getLineFormat().setWidth(20);
pf.setRotation(45);
// يكتب ملف PPTX إلى القرص
pres.save("RectPicFrame.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
نصيحة
قامت Aspose مؤخرًا بتطوير أداة صانع كولاج مجاني. إذا احتجت إلى دمج صور JPG/JPEG أو PNG، أو إنشاء شبكات من الصور، يمكنك استخدام هذه الخدمة.إضافة صورة كارتباط
لتقليل حجم العروض الكبيرة، يمكنك إضافة صور (أو مقاطع فيديو) عبر روابط بدلاً من تضمين الملفات مباشرةً في العروض. يُظهر هذا الكود Java كيفية إضافة صورة وفيديو إلى عنصر نائب:
Presentation presentation = new Presentation("input.pptx");
try {
ArrayList<IShape> shapesToRemove = new ArrayList<IShape>();
int shapesCount = presentation.getSlides().get_Item(0).getShapes().size();
for (int i = 0; i < shapesCount; i++)
{
IShape autoShape = presentation.getSlides().get_Item(0).getShapes().get_Item(i);
if (autoShape.getPlaceholder() == null)
{
continue;
}
switch (autoShape.getPlaceholder().getType())
{
case PlaceholderType.Picture:
IPictureFrame 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:
IVideoFrame 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;
}
}
for (IShape shape : shapesToRemove)
{
presentation.getSlides().get_Item(0).getShapes().remove(shape);
}
presentation.save("output.pptx", SaveFormat.Pptx);
} finally {
if (presentation != null) presentation.dispose();
}
اقتصاص الصور
هذا الكود Java يوضح كيفية قص صورة موجودة على شريحة:
Presentation pres = new Presentation();
// ينشئ كائن صورة جديد
try {
IPPImage picture;
IImage image = Images.fromFile(imagePath);
try {
picture = pres.getImages().addImage(image);
} finally {
if (image != null) image.dispose();
}
// يضيف PictureFrame إلى شريحة
IPictureFrame picFrame = pres.getSlides().get_Item(0).getShapes().addPictureFrame(
ShapeType.Rectangle, 100, 100, 420, 250, picture);
// يقص الصورة (قِيَم النسبة المئوية)
picFrame.getPictureFormat().setCropLeft(23.6f);
picFrame.getPictureFormat().setCropRight(21.5f);
picFrame.getPictureFormat().setCropTop(3);
picFrame.getPictureFormat().setCropBottom(31);
// يحفظ النتيجة
pres.save(outPptxFile, SaveFormat.Pptx);
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
حذف المناطق المقصوصة من إطار الصورة
إذا رغبت في حذف المناطق المقصوصة من صورة موجودة داخل إطار، يمكنك استخدام طريقة deletePictureCroppedAreas() . تُعيد هذه الطريقة الصورة المقصوصة أو الصورة الأصلية إذا لم يكن الاقتصاص ضروريًا.
هذا الكود Java يُظهر العملية:
Presentation presentation = new Presentation("PictureFrameCrop.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
// يحصل على إطار الصورة من الشريحة الأولى
IPictureFrame picFrame = (IPictureFrame)slide.getShapes().get_Item(0);
// يحذف المناطق المقصوصة من صورة إطار الصورة ويعيد الصورة المقصوصة
IPPImage croppedImage = picFrame.getPictureFormat().deletePictureCroppedAreas();
// يحفظ النتيجة
presentation.save("PictureFrameDeleteCroppedAreas.pptx", SaveFormat.Pptx);
} finally {
if (presentation != null) presentation.dispose();
}
ملاحظة
طريقة deletePictureCroppedAreas() تُضيف الصورة المقصوصة إلى مجموعة صور العرض. إذا كانت الصورة مستخدمة فقط في PictureFrame المعالجة، يمكن لهذا الإعداد تقليل حجم العرض. وإلا، سيزداد عدد الصور في العرض الناتج.
تحول هذه الطريقة ملفات WMF/EMF إلى صورة PNG نقطية أثناء عملية الاقتصاص.
قفل نسبة الأبعاد
إذا رغبت في أن يحتفظ الشكل الذي يحتوي على صورة بنسبة أبعاده حتى بعد تغيير أبعاد الصورة، يمكنك استخدام طريقة setAspectRatioLocked لتعيين إعداد قفل نسبة الأبعاد.
هذا الكود Java يوضح كيفية قفل نسبة أبعاد الشكل:
Presentation pres = new Presentation("pres.pptx");
try {
ILayoutSlide layout = pres.getLayoutSlides().getByType(SlideLayoutType.Custom);
ISlide emptySlide = pres.getSlides().addEmptySlide(layout);
IPPImage picture;
IImage image = Images.fromFile("image.png");
try {
picture = pres.getImages().addImage(image);
} finally {
if (image != null) image.dispose();
}
IPictureFrame pictureFrame = emptySlide.getShapes().addPictureFrame(
ShapeType.Rectangle, 50, 150, presImage.getWidth(), presImage.getHeight(), picture);
// تعيين الشكل للحفاظ على نسبة الأبعاد عند التحجيم
pictureFrame.getPictureFrameLock().setAspectRatioLocked(true);
} catch(IOException e) {
} finally {
if (pres != null) pres.dispose();
}
ملاحظة
إعداد قفل نسبة الأبعاد يحافظ فقط على نسبة أبعاد الشكل وليس على الصورة التي يحتويها.استخدام خاصية StretchOff
باستخدام خصائص StretchOffsetLeft، StretchOffsetTop، StretchOffsetRight وStretchOffsetBottom من واجهة IPictureFillFormat وفئة PictureFillFormat، يمكنك تحديد مستطيل تعبئة.
عند تحديد تمدد لصورة، يتم تحجيم المستطيل المصدر ليتناسب مع مستطيل التعبئة المحدد. كل حافة من مستطيل التعبئة تُعرف بنسبة إزاحة من الحافة المقابلة لمربع إطارات الشكل. النسبة الموجبة تُشير إلى داخل، والنسبة السالبة إلى خارج.
- إنشاء مثال من فئة Presentation.
- الحصول على مرجع الشريحة من خلال فهرستها.
- إضافة مستطيل
AutoShape. - إنشاء صورة.
- ضبط نوع تعبئة الشكل.
- ضبط وضع تعبئة الصورة للشكل.
- إضافة صورة تعبئة لتملأ الشكل.
- تحديد إزاحات الصورة من الحافة المقابلة لمربع إطارات الشكل.
- كتابة العرض المعدل كملف PPTX.
هذا الكود Java يوضح عملية استخدام خاصية StretchOff:
// ينشئ كائن من فئة Presentation التي تمثل ملف PPTX
Presentation pres = new Presentation();
try {
// يحصل على الشريحة الأولى
ISlide slide = pres.getSlides().get_Item(0);
// ينشئ كائن من فئة ImageEx
IPPImage picture;
IImage image = Images.fromFile("aspose-logo.jpg");
try {
picture = pres.getImages().addImage(image);
} finally {
if (image != null) image.dispose();
}
// يضيف AutoShape من النوع Rectangle
IAutoShape 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 (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
الأسئلة الشائعة
كيف يمكنني معرفة صيغ الصور المدعومة لإطار الصورة؟
يدعم Aspose.Slides كلًا من الصور النقطية (PNG، JPEG، BMP، GIF، إلخ) والصور المتجهة (مثل SVG) عبر كائن الصورة المعيّن لـ PictureFrame. عادةً ما تتقاطع قائمة الصيغ المدعومة مع إمكانيات محرك تحويل الشرائح والصور.
كيف سيؤثر إضافة العشرات من الصور الكبيرة على حجم PPTX والأداء؟
إدماج الصور الكبيرة يزيد من حجم الملف واستهلاك الذاكرة؛ ربط الصور يساعد في تقليل حجم العرض لكنه يتطلب بقاء الملفات الخارجية متاحة. يوفر Aspose.Slides إمكانية إضافة الصور عبر روابط لتقليل حجم الملف.
كيف يمكنني قفل كائن الصورة لمنعه من التحرك/تغيير الحجم غير المقصود؟
استخدم قفل الأشكال لـ PictureFrame (مثل تعطيل التحريك أو تغيير الحجم). تُشرح آلية القفل للأشكال في مقال الحماية وتدعم أنواع أشكال مختلفة بما فيها PictureFrame.
هل يتم الحفاظ على دقة SVG المتجهة عند تصدير العرض إلى PDF/صور؟
يسمح Aspose.Slides باستخراج SVG من PictureFrame كمتجه أصلي. عند التصدير إلى PDF أو الصيغ النقطية، قد يتم تحويله إلى نقطي حسب إعدادات التصدير؛ يُؤكد سلوك الاستخراج أن SVG الأصلي يبقى كمتجه.