إدارة تأثيرات تحويل الصورة في العروض التقديمية باستخدام JavaScript

نظرة عامة

Aspose.Slides تمثّل تعديلات الصورة كمجموعة مرتبة من عمليات تحويل الصورة. لإطار صورة، ابدأ بـ Picture الخاص بالإطار واحصل على Picture.getImageTransform. المجموعة المرجعية ImageTransformOperationCollection التي تُعاد لك تتيح لك إلحاق، تعداد، فحص، إزالة، وتصفية التأثيرات دون الحاجة إلى إعادة كتابة بايتات الصورة الأصلية.

توضح هذه المقالة سير عمل كامل للسطوع والتباين، تحويلات اللون، الضبابية، الشفافية، سلاسل التأثير المرتبة، القيم الفعّالة، الإزالة، والتحقق من جولة PPTX.

فهم ملكية التأثير وإعادة استخدام الصورة

موارد الصورة والصورة التي تعرضها كائنات مختلفة:

  • PPImage يخزن أو يشير إلى بيانات الصورة المصدرية المملوكة للعرض.
  • Picture ينتمي إلى تعبئة الصورة ويشير إلى مورد صورة مع حفظ مجموعة تحويل الصورة.
  • PictureFrame هو شكل الشريحة الذي يمتلك تعبئة الصورة ذات الصلة، الهندسة، إعدادات القص، وتنسيق مستوى الإطار الآخر.

لذلك، عمليات تحويل الصورة لا تُعدّل البايتات في PPImage. عندما يتم تمرير نفس PPImage إلى ShapeCollection.addPictureFrame أكثر من مرة، يحصل كل إطار صورة جديد على Picture خاص به ومجموعة تحويل خاصة به. تطبيق تدرج الرمادي على إطار واحد لا يجعل الإطارات الأخرى رمادية، رغم أن جميعها يعيد استخدام نفس مورد الصورة المدمج.

نموذج Picture.getImageTransform يُستخدم أيضاً من قبل تعبئات صور أخرى، مثل شكل أو خلفية شريحة. تركز الأمثلة أدناه على إطارات الصور.

استخدام نطاقات ومعايير صحيحة للمعلمات

الطرق الموضحة تستخدم النطاقات الدلالية والوحدات التالية. احتفظ بالقيم ضمن هذه النطاقات حتى لو لم ترفض نسخة المكتبة الحالية القيم غير الصالحة على الفور؛ قد يقوم تنسيق العرض الهدف بتطبيع أو حذف أو رفض البيانات غير الصالحة أثناء الحفظ أو عند فتح PowerPoint للملف.

العملية المعلمات النطاق والوحدة الصالحة
addBrightnessContrastEffect brightness, contrast -100 إلى 100،٪؛ 0 يترك المكوّن دون تغيير.
addGrayScaleEffect لا شيء لا توجد معلمات رقمية. لا يتغيّر ألفا.
addDuotoneEffect color1, color2 لونان للبيكسلات الداكنة والفاتحة. القنوات RGB و alpha في java.awt.Color تتراوح بين 0 إلى 255.
addTintEffect hue, amount hue من 0 شامل إلى 360 غير شامل، بالدرجات؛ amount من -100 إلى 100،٪.
addHSLEffect hue, saturation, luminance hue من 0 شامل إلى 360 غير شامل، بالدرجات؛ saturation و luminance من -100 إلى 100،٪.
addColorReplaceEffect color لون الاستبدال يستخدم قيم القنوات من 0 إلى 255. قيم ألفا الحالية لا تُغيّر.
addBlurEffect radius, grow radius غير سالب ويقاس بالنقاط؛ grow قيمة Boolean تتحكم فيما إذا كان المحتوى الضبابي قد يمتد خارج الحدود الأصلية.
addAlphaModulateFixedEffect amount نسبة مئوية غير سلبية. استخدم 0 إلى 100 لتعديل الشفافية العادي: 0 شفافية كاملة و 100 يحافظ على ألفا الحالي.
addAlphaReplaceEffect alpha 0 إلى 100،٪ شفافية.
addAlphaBiLevelEffect threshold 0 إلى 100،٪ عتبة ألفا. القيم الأقل تصبح شفافة؛ القيم عند أو فوق العتبة تصبح معتمة.

للتحكم الثابت في تعديل الألفا، الشفافية والعتامة متكاملتان. مثال: شفافية 35٪ تعادل تعديل ألفا بقيمة 65٪.

تطبيق السطوع والتباين

ImageTransformOperationCollection.addBrightnessContrastEffect يُعيد عملية BrightnessContrast. تُحدد الإعدادات القياسية عند إنشاء العملية. BrightnessContrast.getEffective تُعيد قيماً محسوبة للقراءة فقط يمكن فحصها أو تسجيلها.

المثال التالي يزيد السطوع بنسبة 15٪ والتباين بنسبة 20٪، ثم يعرض معاينة دون تعديل الصورة المدمجة:

const aspose = {};
aspose.slides = require("aspose.slides.via.java");

const presentation = new aspose.slides.Presentation();
try {
    const slide = presentation.getSlides().get_Item(0);

    let image;
    const sourceImage = aspose.slides.Images.fromFile("photo.png");
    try {
        image = presentation.getImages().addImage(sourceImage);
    } finally {
        sourceImage.dispose();
    }

    const pictureFrame = slide.getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 50, 50, 400, 260, image);
    const imageTransform = pictureFrame.getPictureFormat().getPicture().getImageTransform();
    const brightnessContrast = imageTransform.addBrightnessContrastEffect(15, 20);

    const effectiveValues = brightnessContrast.getEffective();
    console.log("Brightness: " + effectiveValues.getBrightness() + "%");
    console.log("Contrast: " + effectiveValues.getContrast() + "%");

    const preview = slide.getImage();
    try {
        preview.save("brightness-contrast-preview.png", aspose.slides.ImageFormat.Png);
    } finally {
        preview.dispose();
    }
} finally {
    presentation.dispose();
}

BrightnessContrast هو امتداد تأثير صورة Office 2010 وأقل قابلية للنقل مقارنةً بتأثير luminance القياسي في DrawingML. عندما يجب أن تبقى قيم السطوع والتباين قابلة للتحرير بعد جولة PPTX، استخدم ImageTransformOperationCollection.addLuminanceEffect وتحقق من النتيجة بعد إعادة فتح الملف. يشرح قسم قيود التنسيق هذا الفرق بمزيد من التفاصيل.

تطبيق تحويلات اللون

يمكن تطبيق تأثيرات اللون بشكل مستقل على إطارات صور مختلفة تُعيد استخدام مورد صورة واحد. المثال التالي ينشئ خمسة إطارات ويطبق تدرج الرمادي، duotone، tint، تعديل HSL، واستبدال اللون.

Duotone يحتوي على معلمتين لونيتين يمكن تعديلهما بشكل مستقل: color1 يطابق البيكسلات الداكنة، بينما color2 يطابق البيكسلات الفاتحة. هذا يجعلها مثالاً مفيداً لتأثير إعداداته أكثر تعقيداً من قيمة قياسية واحدة.

const aspose = {};
aspose.slides = require("aspose.slides.via.java");
const java = require("java");

const presentation = new aspose.slides.Presentation();
try {
    const slide = presentation.getSlides().get_Item(0);

    let image;
    const sourceImage = aspose.slides.Images.fromFile("photo.png");
    try {
        image = presentation.getImages().addImage(sourceImage);
    } finally {
        sourceImage.dispose();
    }

    const grayFrame = slide.getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 20, 20, 180, 120, image);
    grayFrame.getPictureFormat().getPicture().getImageTransform().addGrayScaleEffect();

    const duotoneFrame = slide.getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 220, 20, 180, 120, image);
    const duotone = duotoneFrame.getPictureFormat().getPicture().getImageTransform().addDuotoneEffect();
    duotone.getColor1().setColor(java.newInstanceSync("java.awt.Color", 0, 0, 128));
    duotone.getColor2().setColor(java.newInstanceSync("java.awt.Color", 255, 215, 0));

    const tintFrame = slide.getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 420, 20, 180, 120, image);
    tintFrame.getPictureFormat().getPicture().getImageTransform().addTintEffect(210, 35);

    const hslFrame = slide.getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 120, 170, 180, 120, image);
    hslFrame.getPictureFormat().getPicture().getImageTransform().addHSLEffect(30, 20, -10);

    const replacementFrame = slide.getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 320, 170, 180, 120, image);
    const colorReplacement = replacementFrame.getPictureFormat().getPicture().getImageTransform().addColorReplaceEffect();
    colorReplacement.getColor().setColor(java.newInstanceSync("java.awt.Color", 100, 149, 237));

    presentation.save("color-transformations.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

addColorReplaceEffect يستبدل كل لون بيكسل بلون ثابت واحد مع الحفاظ على ألفا. يختلف عن addColorChangeEffect، الذي يطابق لون مصدر بلون هدف ويُظهر كلا تنسيقَي اللون المصدر والهدف.

إضافة تأثيرات الضبابية والشفافية والألفا

addBlurEffect يؤثر على جميع قنوات اللون، بما فيها ألفا. عيّن grow إلى true عندما قد يمتد الحافة الضبابية خارج حدود الصورة الأصلية.

لشفافية موحدة، استخدم addAlphaModulateFixedEffect. يضرب كل قيمة ألفا موجودة، لذا يبقى البكسل شبه شفاف بنسب متفاوتة. addAlphaReplaceEffect يعيّن قيمة ألفا واحدة لكل البكسلات. addAlphaBiLevelEffect يحول ألفا إلى مستويين استناداً إلى عتبة.

const aspose = {};
aspose.slides = require("aspose.slides.via.java");

const presentation = new aspose.slides.Presentation();
try {
    const slide = presentation.getSlides().get_Item(0);

    let image;
    const sourceImage = aspose.slides.Images.fromFile("photo.png");
    try {
        image = presentation.getImages().addImage(sourceImage);
    } finally {
        sourceImage.dispose();
    }

    const blurredFrame = slide.getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 20, 20, 200, 140, image);
    const blur = blurredFrame.getPictureFormat().getPicture().getImageTransform().addBlurEffect(4.5, true);
    blur.setRadius(5);

    const transparentFrame = slide.getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 240, 20, 200, 140, image);
    const alphaModulate = transparentFrame.getPictureFormat().getPicture().getImageTransform().addAlphaModulateFixedEffect(65);
    alphaModulate.setAmount(60);

    const uniformAlphaFrame = slide.getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 20, 180, 200, 140, image);
    uniformAlphaFrame.getPictureFormat().getPicture().getImageTransform().addAlphaReplaceEffect(55);

    const binaryAlphaFrame = slide.getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 240, 180, 200, 140, image);
    const alphaBiLevel = binaryAlphaFrame.getPictureFormat().getPicture().getImageTransform().addAlphaBiLevelEffect(50);
    alphaBiLevel.setThreshold(45);
    binaryAlphaFrame.getPictureFormat().getPicture().getImageTransform().addAlphaInverseEffect();

    presentation.save("blur-and-alpha-effects.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

تشمل عمليات ألفا الأخرى غير المعتمدة على معلمات addAlphaCeilingEffect، التي تجعل كل ألفا غير صفرية غير شفافة بالكامل؛ addAlphaFloorEffect، التي تجعل كل ألفا أقل من 100٪ شفافة بالكامل؛ و addAlphaInverseEffect، التي تغيّر ألفا إلى 100% - alpha.

بناء سلسلة تأثير مرتبة

كل طريقة add...Effect تُلحق عملية جديدة إلى نهاية المجموعة. يستخدم المُصيّر المجموعة كسلسلة مرتبة: ناتج العملية 0 يصبح مدخل العملية 1، وهكذا. وبالتالي، قد تُنتج نفس العمليات بترتيب مختلف صورة مختلفة.

على سبيل المثال، تدرج الرمادي متبوعاً بـ tint يزيل أولاً المعلومات اللونية ثم يُعيد تلوين النتيجة اللونية. tint متبوعاً بـ grayscale يزيل tint مرة أخرى. وبالمثل، يمكن لاستبدال ألفا أن يتجاوز قيم ألفا التي حسبتها عمليات سابقة، بينما يحافظ تعديل ألفا على الفروقات النسبية بينها.

المثال التالي يبني سلسلة مكوّنة من أربع عمليات، يحفظها كـ PPTX، يعيد فتح العرض، يتحقق من كلا نوعي العملية وترتيبهما، ويُصيّر النتيجة المعاد فتحها:

const aspose = {};
aspose.slides = require("aspose.slides.via.java");
const java = require("java");

const presentation = new aspose.slides.Presentation();
try {
    const slide = presentation.getSlides().get_Item(0);

    let image;
    const sourceImage = aspose.slides.Images.fromFile("photo.png");
    try {
        image = presentation.getImages().addImage(sourceImage);
    } finally {
        sourceImage.dispose();
    }

    const pictureFrame = slide.getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 50, 50, 400, 260, image);
    const imageTransform = pictureFrame.getPictureFormat().getPicture().getImageTransform();
    imageTransform.addGrayScaleEffect();
    imageTransform.addTintEffect(220, 25);
    imageTransform.addBlurEffect(2.5, false);
    imageTransform.addAlphaModulateFixedEffect(80);

    presentation.save("image-transform-chain.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

const reopenedPresentation = new aspose.slides.Presentation("image-transform-chain.pptx");
try {
    const reopenedShape = reopenedPresentation.getSlides().get_Item(0).getShapes().get_Item(0);

    if (java.instanceOf(reopenedShape, "com.aspose.slides.IPictureFrame")) {
        const reopenedTransform = reopenedShape.getPictureFormat().getPicture().getImageTransform();
        const orderIsPreserved = reopenedTransform.size() === 4 &&
            java.instanceOf(reopenedTransform.get_Item(0), "com.aspose.slides.IGrayScale") &&
            java.instanceOf(reopenedTransform.get_Item(1), "com.aspose.slides.ITint") &&
            java.instanceOf(reopenedTransform.get_Item(2), "com.aspose.slides.IBlur") &&
            java.instanceOf(reopenedTransform.get_Item(3), "com.aspose.slides.IAlphaModulateFixed");
        console.log(orderIsPreserved ? "The effect chain was preserved." : "The effect chain changed during the round trip.");

        const renderedSlide = reopenedPresentation.getSlides().get_Item(0).getImage();
        try {
            renderedSlide.save("reopened-effect-chain.png", aspose.slides.ImageFormat.Png);
        } finally {
            renderedSlide.dispose();
        }
    } else {
        console.log("The reopened shape is not a picture frame.");
    }
} finally {
    reopenedPresentation.dispose();
}

المجموعة لا تفرض مصفوفة توافق تقيد عمليات اللون، الألفا، والضبابية بسلاسل منفصلة. يمكن دمجها، لكن ليست كل التركيبات مفيدة. استبدال اللون الثابت يزيل تباين RGB الناتج عن تأثيرات اللون السابقة؛ تدرج الرمادي بعد duotone يزيل اللونين المختارين؛ وعملية سقف، أرضية، أو استبدال ألفا أو ثنائية المستوى قد تُزيل تفاصيل ألفا التي أُنشئت سابقاً. ابنِ السلسلة وفق تسلسل معالجة البكسل المطلوب بدلاً من اعتبار عناصرها علامات تنسيق غير مرتبة.

فحص القيم القابلة للتحرير والفعّالة

العملية القابلة للتحرير هي الكائن المخزن في Picture.getImageTransform. بحسب التأثير، قد تُظهر أعضاء قابلة للكتابة مباشرة. مثال: Blur يُظهر قيم radius و grow القابلة للكتابة، AlphaModulateFixed يُظهر amount القابل للكتابة، و AlphaBiLevel يُظهر threshold القابل للكتابة. تأثيرات اللون مثل Duotone تُظهر كائنات ColorFormat قابلة للتعديل.

بعض العمليات، بما فيها BrightnessContrast، HSL, Tint, و AlphaReplace، لا تُظهر معاملات الإنشاء كخصائص قابلة للكتابة. لتغيير هذه الإعدادات، احذف العملية وأضف بديلة في الموضع المطلوب.

البيانات الفعّالة التي تُعيدها getEffective() محسوبة ولا يمكن تعديلها. هي مفيدة لحل ألوان الموضوع وقراءة القيم المُعيرة التي يستخدمها المُصيّر، لكنها ليست سطح تحرير آخر. المثال التالي يعدد السلسلة ويفحص القيم الفعّالة حيث توفر API ما لها:

const aspose = {};
aspose.slides = require("aspose.slides.via.java");
const java = require("java");

const presentation = new aspose.slides.Presentation("image-transform-chain.pptx");
try {
    const shapes = presentation.getSlides().get_Item(0).getShapes();
    let pictureFrame = null;

    for (let index = 0; index < shapes.size(); index++) {
        const shape = shapes.get_Item(index);
        if (java.instanceOf(shape, "com.aspose.slides.IPictureFrame")) {
            pictureFrame = shape;
            break;
        }
    }

    if (pictureFrame != null) {
        const imageTransform = pictureFrame.getPictureFormat().getPicture().getImageTransform();

        for (let index = 0; index < imageTransform.size(); index++) {
            const operation = imageTransform.get_Item(index);
            console.log(index + ": " + operation.getClass().getSimpleName());

            if (java.instanceOf(operation, "com.aspose.slides.IBrightnessContrast")) {
                const data = operation.getEffective();
                console.log("  Brightness: " + data.getBrightness());
                console.log("  Contrast: " + data.getContrast());
            } else if (java.instanceOf(operation, "com.aspose.slides.ILuminance")) {
                const data = operation.getEffective();
                console.log("  Brightness: " + data.getBrightness());
                console.log("  Contrast: " + data.getContrast());
            } else if (java.instanceOf(operation, "com.aspose.slides.IDuotone")) {
                const data = operation.getEffective();
                console.log("  Dark color: " + data.getColor1());
                console.log("  Light color: " + data.getColor2());
            } else if (java.instanceOf(operation, "com.aspose.slides.IColorReplace")) {
                const data = operation.getEffective();
                console.log("  Replacement color: " + data.getColor());
            } else if (java.instanceOf(operation, "com.aspose.slides.IHSL")) {
                const data = operation.getEffective();
                console.log("  HSL: " + data.getHue() + ", " + data.getSaturation() + ", " + data.getLuminance());
            } else if (java.instanceOf(operation, "com.aspose.slides.ITint")) {
                const data = operation.getEffective();
                console.log("  Tint: " + data.getHue() + ", " + data.getAmount());
            } else if (java.instanceOf(operation, "com.aspose.slides.IBlur")) {
                const data = operation.getEffective();
                console.log("  Blur radius: " + data.getRadius() + " pt");
            } else if (java.instanceOf(operation, "com.aspose.slides.IAlphaModulateFixed")) {
                const data = operation.getEffective();
                console.log("  Alpha amount: " + data.getAmount() + "%");
            } else if (java.instanceOf(operation, "com.aspose.slides.IAlphaReplace")) {
                const data = operation.getEffective();
                console.log("  Replacement alpha: " + data.getAlpha() + "%");
            } else if (java.instanceOf(operation, "com.aspose.slides.IAlphaBiLevel")) {
                const data = operation.getEffective();
                console.log("  Alpha threshold: " + data.getThreshold() + "%");
            }
        }
    }
} finally {
    presentation.dispose();
}

التأثيرات غير المعتمدة على معلمات مثل grayscale، سقف ألفا، والعكس لا يزال لها كائن بيانات فعّالية، لكن لا توجد إعدادات قياسية لطباعة. وجودها وموقعها في المجموعة هو المعلومات المهمّة.

إزالة أو تصفية تحويلات الصورة

استخدم ImageTransformOperationCollection.removeAt لإزالة عملية واحدة بحسب الفهرس. لأن الفهارس تتغير بعد الإزالة، ابحث عن الهدف أولاً وأزِلّه بعد العد. استخدم ImageTransformOperationCollection.clear لإزالة السلسلة بأكملها.

const aspose = {};
aspose.slides = require("aspose.slides.via.java");
const java = require("java");

const presentation = new aspose.slides.Presentation("image-transform-chain.pptx");
try {
    const shapes = presentation.getSlides().get_Item(0).getShapes();
    let pictureFrame = null;

    for (let index = 0; index < shapes.size(); index++) {
        const shape = shapes.get_Item(index);
        if (java.instanceOf(shape, "com.aspose.slides.IPictureFrame")) {
            pictureFrame = shape;
            break;
        }
    }

    if (pictureFrame != null) {
        const imageTransform = pictureFrame.getPictureFormat().getPicture().getImageTransform();
        let blurIndex = -1;

        for (let index = 0; index < imageTransform.size(); index++) {
            if (java.instanceOf(imageTransform.get_Item(index), "com.aspose.slides.IBlur")) {
                blurIndex = index;
                break;
            }
        }

        if (blurIndex >= 0) {
            imageTransform.removeAt(blurIndex);
            console.log("The blur operation was removed.");
        }

        imageTransform.clear();
        console.log("Remaining operations: " + imageTransform.size());
        presentation.save("image-transforms-cleared.pptx", aspose.slides.SaveFormat.Pptx);
    }
} finally {
    presentation.dispose();
}

إزالة أو تصفية التحويلات تُغيّر تنسيق الصورة فقط. لا تحذف، ولا تعيد ضغط، ولا تُغيّر مورد PPImage المُعاد استخدامه.

اعتبار تنسيقات العرض وأهداف التصدير

تنشأ تحويلات الصورة في DrawingML، لذلك يُفضَّل تنسيق PPTX القابل للتحرير لسلاسل التأثير. حتى مع PPTX، ليست كل عملية لها قابلية نقل متساوية:

  • العمليات القياسية في DrawingML مثل luminance، grayscale، duotone، tint، HSL، blur، والعمليات الشائعة للألفا لديها أفضل فرصة للبقاء بعد جولة PPTX. أعد دائمًا فتح الملف المُنشأ وتفقد المجموعة عندما تكون المحافظة مطلوبة.
  • BrightnessContrast هو امتداد Office 2010 وليس عملية luminance القياسية في DrawingML. يمكن استخدامه للتصيير داخل الذاكرة، لكنه ليس مضمونًا أن يبقى عملية BrightnessContrast قابلة للتحرير بعد حفظ وإعادة فتح PPTX. فضلًا عن ذلك استخدم addLuminanceEffect لتعديلات سطوع وتباين مستديمة.
  • تنسيق PPT الثنائي قديم قبل نموذج تأثير DrawingML الكامل. الحفظ إلى PPT قد يُحذف عمليات غير مدعومة، أو يقلل السلسلة إلى مجموعة فرعية مدعومة، أو يقترب من الشكل. لا تستخدم PPT كتنسيق تحقق لسلسلة تحريرية معقّدة.
  • التصيير إلى PNG، JPEG، TIFF، PDF، SVG، HTML أو مخرجات بصرية أخرى يطبق السلسلة المدعومة على المظهر المصوَّر. هذه المخرجات لا تحتوي على ImageTransformOperationCollection قابل للتحرير؛ تنسيقات الرستر تُسطّح النتيجة إلى بكسلات، وتصديرات المستند/الفيكتور تخزن تمثيلها الخاص للتصيير.
  • التأثيرات لا تجعل الصورة المرتبطة ذاتية المحتوى. تصيير صورة مرتبطة لا يزال يعتمد على توفر المورد المرتبط عند تحميل العرض.

قد يقوم مستهلكو العروض المختلفون بتصيير الحالات الحدّية بطرق مختلفة، خاصةً عند دمج عدة عمليات ألفا أو تكميم لون. للنتائج الحرجة، اختبر كلًّا من جولة التحرير النهائية وتنسيق التصدير النهائي باستخدام نفس نسخة Aspose.Slides المستخدمة في الإنتاج.

الأسئلة الشائعة

هل تُعدّل تأثيرات تحويل الصورة بيانات الصورة المدمجة؟

لا. العمليات تنتمي إلى الـ Picture المستخدم في تعبئة الصورة. بايتات الـ PPImage الأساسية تظل دون تغيير.

هل تُشارك إطاري صورة يستخدمان نفس المورد الصورة تأثيراتهما؟

لا. إعادة استخدام PPImage يتجنّب تكرار بيانات الصورة، لكن كل إطار صورة يمتلك عادةً Picture ومجموعة تحويل خاصة به.

هل يمكن دمج تأثيرات اللون والضبابية والألفا؟

نعم. المجموعة تقبلها في سلسلة مرتبة واحدة. فكر فيما تفعله كل عملية على مخرجات العملية السابقة لأن عمليات الاستبدال والعتبة قد تُزيل تفاصيل لونية أو ألفا سابقة.

لماذا القيم الفعّالة للقراءة فقط؟

البيانات الفعّالة تمثل قيمًا مُحسوبة تُستَخدم في التصيير، بما فيها الألوان التي تم حلّها. حرّر العملية المخزنة في مجموعة التحويل حيث توجد أعضاء قابلة للكتابة؛ وإلا احذفها وأضف بديلة بمعلمات الإنشاء الجديدة.

أي تنسيق ينبغي استخدامه للحفاظ على سلسلة التحويل؟

استخدم PPTX وتحقق من الملف بإعادة فتحه. تنسيق PPT القديم لا يستطيع تمثيل نموذج تأثير DrawingML الكامل، وتنسيقات التصدير المصورة تُحافظ على المظهر فقط دون عمليات تحويل قابلة للتحرير.