مدیریت افکت‌های تبدیل تصویر در ارائه‌ها با پایتون

نمایش کلی

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 غیرمنفی و بر حسب نقاط اندازه‌گیری می‌شود؛ 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٪ افزایش می‌دهد و سپس پیش‌نمایشی بدون تغییر تصویر جاسازی‌شده رندر می‌کند:

import jpype
import asposeslides
from pathlib import Path

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import ImageFormat, Presentation, ShapeType

presentation = Presentation()
try:
    slide = presentation.getSlides().get_Item(0)

    image_data = Path("photo.png").read_bytes()
    image_bytes = jpype.JArray(jpype.JByte)(image_data)
    image = presentation.getImages().addImage(image_bytes)
    picture_frame = slide.getShapes().addPictureFrame(ShapeType.Rectangle, 50, 50, 400, 260, image)

    image_transform = picture_frame.getPictureFormat().getPicture().getImageTransform()
    brightness_contrast = image_transform.addBrightnessContrastEffect(15.0, 20.0)

    effective_values = brightness_contrast.getEffective()
    print("Brightness: ", effective_values.getBrightness(), "%", sep="")
    print("Contrast: ", effective_values.getContrast(), "%", sep="")

    preview = slide.getImage()
    try:
        preview.save("brightness-contrast-preview.png", ImageFormat.Png)
    finally:
        preview.dispose()
finally:
    presentation.dispose()

BrightnessContrast افزونهٔ افکت تصویر Office 2010 است و کمتر قابل حمل از افکت روشنایی استاندارد DrawingML است. وقتی روشنایی و کنتراست پس از یک دور PPTX باید قابل ویرایش بمانند، از ImageTransformOperationCollection.addLuminanceEffect استفاده کنید و پس از باز کردن مجدد فایل نتیجه را تأیید کنید. بخش محدودیت‌های فرمت این تفاوت را با جزئیات بیشتری توضیح می‌دهد.

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

افکت‌های رنگی می‌توانند به‌صورت مستقل بر قاب‌های تصویری مختلفی که از یک منبع تصویر استفاده می‌کنند، اعمال شوند. مثال زیر پنج قاب ایجاد می‌کند و به ترتیب خاکستری، دو‌رنگی، رنگ‌پاشی، تنظیم HSL و جایگزینی رنگ را اعمال می‌کند.

Duotone دو پارامتر رنگی مستقل و قابل ویرایش دارد: color1 پیکسل‌های تاریک، در حالی که color2 پیکسل‌های روشن را نقشه می‌کند. این یک مثال مفید از افکتی است که تنظیمات آن پیچیده‌تر از یک مقدار اسکالاری ساده است.

import jpime
import asposeslides
from pathlib import Path

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat, ShapeType
from java.awt import Color

presentation = Presentation()
try:
    slide = presentation.getSlides().get_Item(0)

    image_data = Path("photo.png").read_bytes()
    image_bytes = jpype.JArray(jpype.JByte)(image_data)
    image = presentation.getImages().addImage(image_bytes)

    gray_frame = slide.getShapes().addPictureFrame(ShapeType.Rectangle, 20, 20, 180, 120, image)
    gray_frame.getPictureFormat().getPicture().getImageTransform().addGrayScaleEffect()

    duotone_frame = slide.getShapes().addPictureFrame(ShapeType.Rectangle, 220, 20, 180, 120, image)
    duotone = duotone_frame.getPictureFormat().getPicture().getImageTransform().addDuotoneEffect()
    duotone.getColor1().setColor(Color(0, 0, 128))
    duotone.getColor2().setColor(Color(255, 215, 0))

    tint_frame = slide.getShapes().addPictureFrame(ShapeType.Rectangle, 420, 20, 180, 120, image)
    tint_frame.getPictureFormat().getPicture().getImageTransform().addTintEffect(210.0, 35.0)

    hsl_frame = slide.getShapes().addPictureFrame(ShapeType.Rectangle, 120, 170, 180, 120, image)
    hsl_frame.getPictureFormat().getPicture().getImageTransform().addHSLEffect(30.0, 20.0, -10.0)

    replacement_frame = slide.getShapes().addPictureFrame(ShapeType.Rectangle, 320, 170, 180, 120, image)
    color_replacement = replacement_frame.getPictureFormat().getPicture().getImageTransform().addColorReplaceEffect()
    color_replacement.getColor().setColor(Color(100, 149, 237))

    presentation.save("color-transformations.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

addColorReplaceEffect رنگ هر پیکسل را با یک رنگ ثابت جایگزین می‌کند در حالی که آلفا را حفظ می‌سازد. این متفاوت از addColorChangeEffect است که یک رنگ مبدأ را به رنگ هدف دیگری نقشه می‌کند و هر دو قالب رنگ مبدأ و هدف را نمایان می‌سازد.

افکت‌های تار، شفافیت و آلفا را اضافه کنید

addBlurEffect تمام کانال‌های رنگی، از جمله آلفا را تحت تأثیر قرار می‌دهد. وقتی لبهٔ تار ممکن است فراتر از مرزهای تصویر اصلی گسترش یابد، grow را به True تنظیم کنید.

برای شفافیت یکنواخت، از addAlphaModulateFixedEffect استفاده کنید. این مقدار آلفای موجود را در همه پیکسل‌ها ضرب می‌کند، بنابراین پیکسل‌های نیمه‌شفاف به‌نسبت متفاوت باقی می‌مانند. addAlphaReplaceEffect به‌جای آن یک مقدار آلفا را برای تمام پیکسل‌ها اختصاص می‌دهد. addAlphaBiLevelEffect آلفا را بر پایهٔ یک آستانه به دو سطح تبدیل می‌کند.

import jpype
import asposeslides
from pathlib import Path

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat, ShapeType

presentation = Presentation()
try:
    slide = presentation.getSlides().get_Item(0)

    image_data = Path("photo.png").read_bytes()
    image_bytes = jpype.JArray(jpype.JByte)(image_data)
    image = presentation.getImages().addImage(image_bytes)

    blurred_frame = slide.getShapes().addPictureFrame(ShapeType.Rectangle, 20, 20, 200, 140, image)
    blur = blurred_frame.getPictureFormat().getPicture().getImageTransform().addBlurEffect(4.5, True)
    blur.setRadius(5)

    transparent_frame = slide.getShapes().addPictureFrame(ShapeType.Rectangle, 240, 20, 200, 140, image)
    alpha_modulate = transparent_frame.getPictureFormat().getPicture().getImageTransform().addAlphaModulateFixedEffect(65.0)
    alpha_modulate.setAmount(60.0)

    uniform_alpha_frame = slide.getShapes().addPictureFrame(ShapeType.Rectangle, 20, 180, 200, 140, image)
    uniform_alpha_frame.getPictureFormat().getPicture().getImageTransform().addAlphaReplaceEffect(55.0)

    binary_alpha_frame = slide.getShapes().addPictureFrame(ShapeType.Rectangle, 240, 180, 200, 140, image)
    alpha_bi_level = binary_alpha_frame.getPictureFormat().getPicture().getImageTransform().addAlphaBiLevelEffect(50.0)
    alpha_bi_level.setThreshold(45.0)
    binary_alpha_frame.getPictureFormat().getPicture().getImageTransform().addAlphaInverseEffect()

    presentation.save("blur-and-alpha-effects.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

سایر عملیات آلفای بدون پارامتر شامل addAlphaCeilingEffect است که هر آلفای غیرصفر را کاملاً مات می‌کند؛ addAlphaFloorEffect که هر آلفا زیر 100٪ را کاملاً شفاف می‌کند؛ و addAlphaInverseEffect که آلفا را به 100% - alpha تغییر می‌دهد.

ساخت زنجیرهٔ اثر مرتب

هر متد add...Effect یک عملیات جدید را به انتهای مجموعه اضافه می‌کند. رندرر مجموعه را به‌عنوان یک خط تولید مرتب استفاده می‌کند: خروجی عملیات 0 ورودی عملیات 1 می‌شود و به همین ترتیب. بنابراین، همان عملیات‌ها در ترتیب متفاوت می‌توانند تصویر متفاوتی تولید کنند.

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

مثال زیر یک زنجیرهٔ چهار عملیاتی می‌سازد، آن را به‌صورت PPTX ذخیره می‌کند، ارائه را باز می‌کند، هر دو نوع عملیات و ترتیب آن‌ها را بررسی می‌کند و نتیجهٔ باز شده را رندر می‌کند:

import jpype
import asposeslides
from pathlib import Path

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import AlphaModulateFixed, Blur, GrayScale, ImageFormat, PictureFrame, Presentation, SaveFormat, ShapeType, Tint

presentation = Presentation()
try:
    slide = presentation.getSlides().get_Item(0)
    image_data = Path("photo.png").read_bytes()
    image_bytes = jpype.JArray(jpype.JByte)(image_data)
    image = presentation.getImages().addImage(image_bytes)
    picture_frame = slide.getShapes().addPictureFrame(ShapeType.Rectangle, 50, 50, 400, 260, image)

    image_transform = picture_frame.getPictureFormat().getPicture().getImageTransform()
    image_transform.addGrayScaleEffect()
    image_transform.addTintEffect(220.0, 25.0)
    image_transform.addBlurEffect(2.5, False)
    image_transform.addAlphaModulateFixedEffect(80.0)

    presentation.save("image-transform-chain.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

reopened_presentation = Presentation("image-transform-chain.pptx")
try:
    reopened_shape = reopened_presentation.getSlides().get_Item(0).getShapes().get_Item(0)

    if isinstance(reopened_shape, PictureFrame):
        reopened_transform = reopened_shape.getPictureFormat().getPicture().getImageTransform()
        expected_types = (GrayScale, Tint, Blur, AlphaModulateFixed)
        order_is_preserved = reopened_transform.size() == len(expected_types)
        for index, expected_type in enumerate(expected_types):
            order_is_preserved = order_is_preserved and isinstance(reopened_transform.get_Item(index), expected_type)
        print("The effect chain was preserved." if order_is_preserved else "The effect chain changed during the round trip.")

        rendered_slide = reopened_presentation.getSlides().get_Item(0).getImage()
        try:
            rendered_slide.save("reopened-effect-chain.png", ImageFormat.Png)
        finally:
            rendered_slide.dispose()
    else:
        print("The reopened shape is not a picture frame.")
finally:
    reopened_presentation.dispose()

مجموعه محدودیتی برای ترکیب عملیات رنگ، آلفا و تار در زنجیره‌های جداگانه اعمال نمی‌کند. می‌توان آن‌ها را ترکیب کرد، اما ترکیب‌ها همیشه مفید نیستند. یک جایگزینی رنگ ثابت، تنوع RGB تولید شده توسط افکت‌های رنگی قبلی را حذف می‌کند؛ خاکستری‌سازی پس از دو‌رنگی دو رنگ انتخابی را از بین می‌برد؛ و عملیات‌های آلفا ceiling، floor، replacement یا bi‑level می‌توانند جزئیات آلفای ایجادشده در مراحل قبلی را نادیده بگیرند. زنجیره را بر مبنای توالی پردازش پیکسل موردنظر بسازید نه این‌که موارد را به‌عنوان پرچم‌های قالب‌بندی نامرتب در نظر بگیرید.

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

یک عملیات قابل ویرایش همان شیء ذخیره‌شده در Picture.getImageTransform است. بسته به افکت، ممکن است اعضای نوشتنی را مستقیماً نشان دهد. برای مثال، Blur مقادیر نوشتنی radius و grow را نشان می‌دهد، AlphaModulateFixed یک amount نوشتنی را افشا می‌کند، و AlphaBiLevel یک threshold نوشتنی دارد. افکت‌های رنگی مانند Duotone اشیای قابل تغییر ColorFormat را نشان می‌دهند.

برخی کلاس‌های عملیات، از جمله BrightnessContrast، HSL، Tint، و AlphaReplace، مقادیر اسکالاری ساخت خود را به عنوان ویژگی‌های نوشتنی نشان نمی‌دهند. برای تغییر این تنظیمات، عملیات را حذف کنید و یک جایگزین در موقعیت موردنظر اضافه کنید.

داده‌های مؤثر برگردانده‌شده توسط getEffective محاسبه‌شده و فقط‑خواندنی هستند. این داده‌ها برای حل رنگ‌های وابسته به تم و خواندن مقادیر نرمال‌شده‌ای که رندرر استفاده می‌کند، مفید هستند، اما سطح ویرایشی دیگری نیستند. مثال زیر زنجیره را فهرست می‌کند و مقادیر مؤثری را که API مربوطه فراهم می‌کند، بازرسی می‌کند:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import AlphaBiLevel, AlphaModulateFixed, AlphaReplace, Blur, BrightnessContrast, ColorReplace, Duotone, HSL, Luminance, PictureFrame, Presentation, Tint

presentation = Presentation("image-transform-chain.pptx")
try:
    picture_frame = None

    for shape in presentation.getSlides().get_Item(0).getShapes():
        if isinstance(shape, PictureFrame):
            picture_frame = shape
            break

    if picture_frame is not None:
        image_transform = picture_frame.getPictureFormat().getPicture().getImageTransform()

        for index in range(image_transform.size()):
            operation = image_transform.get_Item(index)
            print(index, ": ", operation.getClass().getSimpleName(), sep="")

            if isinstance(operation, BrightnessContrast):
                data = operation.getEffective()
                print("  Brightness: ", data.getBrightness(), sep="")
                print("  Contrast: ", data.getContrast(), sep="")
            elif isinstance(operation, Luminance):
                data = operation.getEffective()
                print("  Brightness: ", data.getBrightness(), sep="")
                print("  Contrast: ", data.getContrast(), sep="")
            elif isinstance(operation, Duotone):
                data = operation.getEffective()
                print("  Dark color: ", data.getColor1(), sep="")
                print("  Light color: ", data.getColor2(), sep="")
            elif isinstance(operation, ColorReplace):
                data = operation.getEffective()
                print("  Replacement color: ", data.getColor(), sep="")
            elif isinstance(operation, HSL):
                data = operation.getEffective()
                print("  HSL: ", data.getHue(), ", ", data.getSaturation(), ", ", data.getLuminance(), sep="")
            elif isinstance(operation, Tint):
                data = operation.getEffective()
                print("  Tint: ", data.getHue(), ", ", data.getAmount(), sep="")
            elif isinstance(operation, Blur):
                data = operation.getEffective()
                print("  Blur radius: ", data.getRadius(), " pt", sep="")
            elif isinstance(operation, AlphaModulateFixed):
                data = operation.getEffective()
                print("  Alpha amount: ", data.getAmount(), "%", sep="")
            elif isinstance(operation, AlphaReplace):
                data = operation.getEffective()
                print("  Replacement alpha: ", data.getAlpha(), "%", sep="")
            elif isinstance(operation, AlphaBiLevel):
                data = operation.getEffective()
                print("  Alpha threshold: ", data.getThreshold(), "%", sep="")
finally:
    presentation.dispose()

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

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

از ImageTransformOperationCollection.removeAt برای حذف یک عملیات بر اساس شاخص استفاده کنید. چون شاخص‌ها پس از حذف جابجا می‌شوند، ابتدا هدف را جستجو کنید و سپس پس از فهرست‌گذاری آن را حذف کنید. برای حذف کل زنجیره از ImageTransformOperationCollection.clear استفاده کنید.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Blur, PictureFrame, Presentation, SaveFormat

presentation = Presentation("image-transform-chain.pptx")
try:
    picture_frame = None

    for shape in presentation.getSlides().get_Item(0).getShapes():
        if isinstance(shape, PictureFrame):
            picture_frame = shape
            break

    if picture_frame is not None:
        image_transform = picture_frame.getPictureFormat().getPicture().getImageTransform()
        blur_index = -1

        for index in range(image_transform.size()):
            if isinstance(image_transform.get_Item(index), Blur):
                blur_index = index
                break

        if blur_index >= 0:
            image_transform.removeAt(blur_index)
            print("The blur operation was removed.")

        image_transform.clear()
        print("Remaining operations: ", image_transform.size(), sep="")
        presentation.save("image-transforms-cleared.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

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

در نظر گرفتن فرمت‌های ارائه و مقاصد صادراتی

تبدیل‌های تصویر از DrawingML نشأت می‌گیرند، بنابراین PPTX فرمت ویرایش‌پذیر ترجیحی برای زنجیره‌های اثر است. حتی در PPTX نیز همهٔ عملیات‌ها همان‌پرتابلیت ندارند:

  • عملیات‌های استاندارد DrawingML مانند luminance، grayscale، duotone، tint، HSL، blur و عملیات‌های عمومی آلفا شانس بیشتری برای بقا پس از دور PPTX دارند. هنگامیکه حفظ اثر ضروری است، همیشه فایل تولیدشده را باز کنید و مجموعه را بازرسی کنید.
  • BrightnessContrast یک افزونهٔ Office 2010 است نه عملیات استاندارد luminance DrawingML. می‌توان آن را برای رندر در حافظه استفاده کرد، اما تضمین نمی‌شود پس از ذخیره و باز کردن PPTX به‌صورت قابل ویرایش باقی بماند. برای تنظیمات ثابت روشنایی و کنتراست، از addLuminanceEffect استفاده کنید.
  • قالب باینری PPT پیش از مدل اثر کامل DrawingML وجود داشته است. ذخیره به‌صورت PPT می‌تواند عملیات‌های پشتیبانی‌نشده را حذف کند، زنجیره را به زیرمجموعهٔ پشتیبانی‌شده کاهش دهد یا ظاهر را تقریب بزند. PPT را برای تأیید زنجیرهٔ ویرایش‌پذیر پیچیده استفاده نکنید.
  • رندر به PNG، JPEG، TIFF، PDF، SVG، HTML یا خروجی‌های تصویری دیگر، زنجیرهٔ پشتیبانی‌شده را روی ظاهر رندر شده اعمال می‌کند. این خروجی‌ها ImageTransformOperationCollection ویرایش‌پذیری را ندارند؛ فرمت‌های رستر نتیجه را به پیکسل‌ها مسطح می‌کنند و صادرات سند/وکتور نمایش رندر خود را ذخیره می‌کنند.
  • افکت‌ها تصویر پیوندی را خودمحافظ نمی‌سازند. رندر یک تصویر پیوندی همچنان به در دسترس بودن منبع پیوندی هنگام بارگذاری ارائه وابسته است.

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

سوالات متداول

آیا افکت‌های تبدیل تصویر دادهٔ تصویر جاسازی‌شده را تغییر می‌دهند؟

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

آیا دو قاب تصویری که از همان تصویر استفاده می‌کنند، افکت‌های یکسانی دارند؟

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

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

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

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

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

کدام فرمت را برای حفظ زنجیرهٔ تبدیل توصیه می‌شود؟

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