مدیریت اثرهای تبدیل تصویر در ارائه‌ها با 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 None پارامتر عددی ندارد. آلفا بدون تغییر می‌ماند.
addDuotoneEffect color1, color2 دو رنگ برای پیکسل‌های تاریک و روشن. مقادیر کانال‌های RGB و آلفا در 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 مقدار غیرمنفی است و به نقطه (point) اندازه‌گیری می‌شود؛ 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 است و نسبت به اثر روشنایی استاندارد DrawingML کمتر قابل حمل است. زمانی که روشنایی و کنتراست پس از یک دورانی PPTX باید قابل ویرایش بمانند، از ImageTransformOperationCollection.addLuminanceEffect استفاده کنید و پس از بازکردن مجدد فایل نتیجه را تأیید کنید. بخش محدودیت‌های قالب این تفاوت را با جزئیات بیشتر توضیح می‌دهد.

اعمال تبدیل‌های رنگی

اثرهای رنگی می‌توانند به‌صورت مستقل بر فریم‌های تصویری مختلف که یک منبع تصویر را دوباره استفاده می‌کنند، اعمال شوند. مثال زیر پنج فریم ایجاد می‌کند و به ترتیب خاکستری، دو‑تن، تنیک، تنظیم 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 می‌شود و الی آخر. بنابراین، همان عملیات‌ها در ترتیب متفاوت می‌توانند تصویر متفاوتی تولید کنند.

به عنوان مثال، خاکستری سپس تنیک ابتدا اطلاعات رنگی را حذف می‌کند و سپس نتیجهٔ روشنایی را رنگ‌آمزی می‌کند. تنیک سپس خاکستری رنگ‌آمزی را از نو حذف می‌کند. به همان ترتیب، جایگزینی آلفا می‌تواند مقادیر آلفای محاسبه‌شده توسط عملیات‌های قبلی را بازنویسی کند، در حالی که تعدیل آلفا تفاوت‌های نسبی آنها را حفظ می‌کند.

مثال زیر یک زنجیرهٔ چهار عملیات می‌سازد، به صورت 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 تولید‌شده توسط اثرهای رنگی قبلی را حذف می‌کند؛ خاکستری پس از دو‑تن دو رنگ انتخابی را حذف می‌کند؛ و عملیات‌های سقف، کف، جایگزینی یا دو‑سطحی آلفا می‌توانند جزئیات آلفای ایجاد‑شده قبلی را نادیده بگیرند. زنجیره را مطابق توالی پردازش پیکسل موردنظر بسازید نه به‌عنوان پرچم‌های قالب‌بندی نامرتب.

بازبینی مقادیر قابل ویرایش و مؤثر

یک عملیات قابل ویرایش همان شیء‌ای است که در 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();
}

اثرهای بدون پارامتر مانند خاکستری، سقف آلفا و وارون آلفا هنوز شیء دادهٔ مؤثر دارند، اما هیچ تنظیم اسکالر برای چاپ وجود ندارد. حضور و موقعیت آنها در مجموعه اطلاعات مهم است.

حذف یا پاک‌سازی تبدیل‌های تصویر

از 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 مانند روشنایی، خاکستری، دو‑تن، تنیک، HSL، تار شدن و عمل‌های آلفای رایج بیشترین شانس بقا در یک دورانی PPTX را دارند. همیشه فایل تولیدشده را باز کنید و مجموعه را بازبینی کنید وقتی حفظ اثرها الزامی است.
  • BrightnessContrast یک افزونهٔ Office 2010 است نه عملیات استاندارد روشنایی DrawingML. می‌تواند برای رندر در حافظه استفاده شود، اما پس از ذخیره و باز کردن PPTX تضمین نمی‌شود که به‌عنوان یک عملیات BrightnessContrast ویرایشی باقی بماند. برای تنظیمات روشنایی و کنتراست پایدار، از addLuminanceEffect استفاده کنید.
  • قالب باینری PPT پیش از مدل کامل اثر DrawingML وجود داشته است. ذخیره به PPT ممکن است عملیات‌های پشتیبانی‌نشده را حذف کند، زنجیره را به زیرمجموعهٔ پشتیبانی‌شده کاهش دهد یا ظاهر را تقریب بزند. برای تأیید زنجیرهٔ ویرایشی پیچیده از PPT به‌عنوان قالب استفاده نکنید.
  • رندر به PNG، JPEG، TIFF، PDF، SVG، HTML یا خروجی‌های تصویری دیگر زنجیرهٔ پشتیبانی‌شده را بر ظاهر رندر شده اعمال می‌کند. این خروجی‌ها مجموعهٔ ImageTransformOperationCollection ویرایشی را ندارند؛ قالب‌های رستر نتیجه را به پیکسل‌ها مسطح می‌کنند و صادرات سند/بردار نمایش رندر خود را ذخیره می‌کنند.
  • اثرها تصویر پیوندی را خود‑کامل نمی‌کنند. رندر تصویر پیوندی همچنان به در دسترس بودن منبع پیوندی هنگام بارگذاری ارائه وابسته است.

مصارف مختلف ارائه ممکن است موارد حاشیه‌ای را به‌طور متفاوت رندر کنند، به‌ویژه وقتی چندین عملیات آلفا یا رنگ‑کوانتایزینگ ترکیب می‌شوند. برای خروجی‌های بحرانی، هم دورانی ویرایشی و هم قالب نهایی خروجی را با همان نسخهٔ Aspose.Slides که در تولید استفاده می‌شود، تست کنید.

پرسش‌های متداول

آیا اثرهای تبدیل تصویر دادهٔ تصویر توکار را تغییر می‌دهند؟

نه. این عملیات‌ها به Picture متعلق هستند که توسط پرکنندهٔ تصویر استفاده می‌شود. بایت‌های زیرین PPImage بدون تغییر می‌مانند.

آیا دو فریم تصویر که از یک تصویر استفاده می‌کنند اثرهای خود را به‌اشتراک می‌گذارند؟

نه. استفاده مجدد از یک PPImage از تکرار دادهٔ تصویر جلوگیری می‌کند، اما هر فریم تصویر معمولاً یک Picture و مجموعهٔ تبدیل تصویر جداگانه دارد.

آیا می‌توان اثرهای رنگ، تار شدن و آلفا را ترکیب کرد؟

بله. مجموعه این اثرها را در یک زنجیرهٔ مرتب می‌پذیرد. توجه کنید هر عملیات چه تأثیری بر خروجی عملیات قبلی دارد، زیرا عملیات جایگزینی و آستانه‑یابی ممکن است جزئیات رنگ یا آلفای پیشین را حذف کنند.

چرا مقادیر مؤثر فقط‑خواندنی هستند؟

داده‌های مؤثر مقادیر محاسبه‌شده‌ای هستند که برای رندر استفاده می‌شوند، از جمله رنگ‌های حل‑شده. عملیات ذخیره‑شده در مجموعهٔ تبدیل را جایی ویرایش کنید که اعضای قابل نوشتن دارد؛ در غیر این صورت آن را حذف کنید و با پارامترهای ایجاد جدید جایگزین کنید.

کدام قالب را برای حفظ زنجیرهٔ تبدیل استفاده کنم؟

از PPTX استفاده کنید و فایل را با باز کردن مجدد تأیید کنید. PPT قدیمی نمی‌تواند مدل کامل اثر DrawingML را نشان دهد و قالب‌های خروجی رندر فقط ظاهر را حفظ می‌کنند نه عملیات تبدیل ویرایشی.