PHP를 사용한 프레젠테이션에서 이미지 변환 효과 관리

개요

Aspose.Slides는 사진 조정을 이미지 변환 작업의 순서가 지정된 컬렉션으로 나타냅니다. 사진 프레임의 경우 프레임의 Picture부터 시작하고 Picture::getImageTransform에 접근합니다. 반환된 ImageTransformOperationCollection를 사용하면 원본 이미지 바이트를 다시 쓰지 않고도 효과를 추가, 열거, 검사, 제거 및 지울 수 있습니다.

이 문서에서는 밝기와 대비, 색상 변환, 흐림, 투명도, 순서가 지정된 효과 체인, 유효값, 제거 및 PPTX 라운드 트립 검증 전체 워크플로우를 보여줍니다.

효과 소유권 및 이미지 재사용 이해

이미지 리소스와 이를 표시하는 사진은 서로 다른 객체입니다.

  • PPImage은 프레젠테이션이 소유하는 원본 이미지 데이터를 저장하거나 참조합니다.
  • Picture은 사진 채우기에 속하며 이미지 리소스를 참조하면서 이미지 변환 컬렉션을 저장합니다.
  • PictureFrame은 해당 사진 채우기, 기하학, 자르기 설정 및 기타 프레임 수준 서식을 소유하는 슬라이드 셰이프입니다.

따라서 이미지 변환 작업은 PPImage의 바이트를 수정하지 않습니다. 동일한 PPImageShapeCollection::addPictureFrame에 여러 번 전달하면 각 새 사진 프레임은 자체 Picture와 자체 변환 컬렉션을 받습니다. 한 프레임에 그레이스케일을 적용해도 다른 프레임은 그레이스케일이 적용되지 않으며, 모두 동일한 임베디드 이미지 리소스를 재사용합니다.

같은 Picture::getImageTransform 모델은 셰이프나 슬라이드 배경과 같은 다른 사진 채우기에서도 사용됩니다. 아래 예시는 사진 프레임에 초점을 맞춥니다.

유효 파라미터 범위 및 단위 사용

시연된 메서드는 다음과 같은 의미 범위와 단위를 사용합니다. 특정 라이브러리 버전이 바로 범위 외 값을 거부하지 않더라도 이 범위 내 값을 유지하십시오. 대상 프레젠테이션 형식이 저장 시 또는 PowerPoint가 파일을 열 때 데이터를 정규화, 생략 또는 거부할 수 있습니다.

Operation Parameters Valid range and unit
addLuminanceEffect brightness, contrast -100부터 100까지, 퍼센트; 0은 해당 구성 요소를 변경하지 않음.
addGrayScaleEffect None 숫자 파라미터 없음. 알파 값은 변경되지 않음.
addDuotoneEffect color1, color2 어두운 픽셀과 밝은 픽셀에 대한 두 색상. java.awt.Color의 RGB 및 알파 채널은 0부터 255까지 사용.
addTintEffect hue, amount 색조는 0 (포함)부터 360 (미포함)까지 도 단위; 양은 -100부터 100까지, 퍼센트.
addHSLEffect hue, saturation, luminance 색조는 0 (포함)부터 360 (미포함)까지 도 단위; 채도와 밝기는 -100부터 100까지, 퍼센트.
addColorReplaceEffect color 교체 색상은 0부터 255까지 채널 값을 사용. 기존 알파 값은 변경되지 않음.
addBlurEffect radius, grow 반경은 음수가 아니며 포인트 단위; grow는 흐릿한 내용이 원본 경계를 넘어 확장될 수 있는지 제어하는 Boolean 값.
addAlphaModulateFixedEffect amount 음수가 아닌 퍼센트. 일반적인 불투명도 스케일링은 0부터 100까지 사용: 0은 완전 투명, 100은 기존 알파를 유지.
addAlphaReplaceEffect alpha 0부터 100까지, 퍼센트 불투명도.
addAlphaBiLevelEffect threshold 0부터 100까지, 퍼센트 알파 임계값. 임계값 이하이면 투명, 이상이면 불투명.

고정 알파 변조의 경우 투명도와 불투명도는 보완 관계에 있습니다. 예를 들어 35% 투명도는 알파 변조 값 65%에 해당합니다.

밝기와 대비 적용

ImageTransformOperationCollection::addLuminanceEffectLuminance 작업을 반환합니다. 스칼라 설정은 작업 생성 시 제공됩니다. Luminance::getEffective은 읽기 전용 계산값을 반환하며, 이를 검사하거나 로그에 기록할 수 있습니다.

다음 예시는 밝기를 15%, 대비를 20% 증가시킨 뒤 임베디드 이미지를 수정하지 않고 미리보기를 렌더링합니다.

use aspose\slides\ImageFormat;
use aspose\slides\Images;
use aspose\slides\Presentation;
use aspose\slides\ShapeType;

$presentation = new Presentation();
try {
    $slide = $presentation->getSlides()->get_Item(0);

    $sourceImage = Images::fromFile("photo.png");
    try {
        $image = $presentation->getImages()->addImage($sourceImage);
    } finally {
        if (!java_is_null($sourceImage)) {
            $sourceImage->dispose();
        }
    }

    $pictureFrame = $slide->getShapes()->addPictureFrame(ShapeType::Rectangle, 50, 50, 400, 260, $image);
    $imageTransform = $pictureFrame->getPictureFormat()->getPicture()->getImageTransform();
    $luminance = $imageTransform->addLuminanceEffect(15, 20);

    $effectiveValues = $luminance->getEffective();
    echo "Brightness: " . java_values($effectiveValues->getBrightness()) . "%" . PHP_EOL;
    echo "Contrast: " . java_values($effectiveValues->getContrast()) . "%" . PHP_EOL;

    $preview = $slide->getImage();
    try {
        $preview->save("brightness-contrast-preview.png", ImageFormat::Png);
    } finally {
        if (!java_is_null($preview)) {
            $preview->dispose();
        }
    }
} finally {
    $presentation->dispose();
}

Luminance는 표준 DrawingML 밝기 및 대비 효과입니다. PPTX 라운드 트립 후에도 이러한 설정을 편집 가능하도록 유지하려면 저장된 프레젠테이션을 다시 열어 작업 유형과 유효값을 확인하십시오.

색상 변환 적용

색상 효과는 동일한 이미지 리소스를 재사용하는 서로 다른 사진 프레임에 독립적으로 적용할 수 있습니다. 다음 예시는 다섯 개의 프레임을 만들고 그레이스케일, 듀오톤, 색조, HSL 조정 및 색상 교체를 적용합니다.

Duotonecolor1이 어두운 픽셀을, color2가 밝은 픽셀을 매핑하는 두 개의 독립적인 색상 파라미터를 가집니다. 이는 단일 스칼라 값보다 설정이 복잡한 효과의 유용한 예시입니다.

use aspose\slides\Images;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\ShapeType;

$presentation = new Presentation();
try {
    $slide = $presentation->getSlides()->get_Item(0);

    $sourceImage = Images::fromFile("photo.png");
    try {
        $image = $presentation->getImages()->addImage($sourceImage);
    } finally {
        if (!java_is_null($sourceImage)) {
            $sourceImage->dispose();
        }
    }

    $grayFrame = $slide->getShapes()->addPictureFrame(ShapeType::Rectangle, 20, 20, 180, 120, $image);
    $grayFrame->getPictureFormat()->getPicture()->getImageTransform()->addGrayScaleEffect();

    $duotoneFrame = $slide->getShapes()->addPictureFrame(ShapeType::Rectangle, 220, 20, 180, 120, $image);
    $duotone = $duotoneFrame->getPictureFormat()->getPicture()->getImageTransform()->addDuotoneEffect();
    $duotone->getColor1()->setColor(new Java("java.awt.Color", 0, 0, 128));
    $duotone->getColor2()->setColor(new Java("java.awt.Color", 255, 215, 0));

    $tintFrame = $slide->getShapes()->addPictureFrame(ShapeType::Rectangle, 420, 20, 180, 120, $image);
    $tintFrame->getPictureFormat()->getPicture()->getImageTransform()->addTintEffect(210, 35);

    $hslFrame = $slide->getShapes()->addPictureFrame(ShapeType::Rectangle, 120, 170, 180, 120, $image);
    $hslFrame->getPictureFormat()->getPicture()->getImageTransform()->addHSLEffect(30, 20, -10);

    $replacementFrame = $slide->getShapes()->addPictureFrame(ShapeType::Rectangle, 320, 170, 180, 120, $image);
    $colorReplacement = $replacementFrame->getPictureFormat()->getPicture()->getImageTransform()->addColorReplaceEffect();
    $colorReplacement->getColor()->setColor(new Java("java.awt.Color", 100, 149, 237));

    $presentation->save("color-transformations.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

addColorReplaceEffect는 알파를 유지하면서 모든 픽셀의 색을 고정 색상으로 교체합니다. 이는 하나의 소스 색상을 다른 색상에 매핑하고 소스 및 대상 색상 형식을 모두 노출하는 addColorChangeEffect와 다릅니다.

흐림, 투명도 및 알파 효과 추가

addBlurEffect는 알파를 포함한 모든 색상 채널에 영향을 줍니다. 흐릿한 가장자리가 원본 사진 경계를 넘어설 수 있는 경우 growtrue로 설정하십시오.

균일한 투명도를 위해서는 addAlphaModulateFixedEffect를 사용합니다. 이 효과는 기존 알파 값을 모두 곱하므로 부분 투명 픽셀은 비례적으로 차이를 유지합니다. addAlphaReplaceEffect는 모든 픽셀에 동일한 알파 값을 할당하고, addAlphaBiLevelEffect는 임계값에 따라 알파를 두 단계로 변환합니다.

use aspose\slides\Images;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\ShapeType;

$presentation = new Presentation();
try {
    $slide = $presentation->getSlides()->get_Item(0);

    $sourceImage = Images::fromFile("photo.png");
    try {
        $image = $presentation->getImages()->addImage($sourceImage);
    } finally {
        if (!java_is_null($sourceImage)) {
            $sourceImage->dispose();
        }
    }

    $blurredFrame = $slide->getShapes()->addPictureFrame(ShapeType::Rectangle, 20, 20, 200, 140, $image);
    $blur = $blurredFrame->getPictureFormat()->getPicture()->getImageTransform()->addBlurEffect(4.5, true);
    $blur->setRadius(5);

    $transparentFrame = $slide->getShapes()->addPictureFrame(ShapeType::Rectangle, 240, 20, 200, 140, $image);
    $alphaModulate = $transparentFrame->getPictureFormat()->getPicture()->getImageTransform()->addAlphaModulateFixedEffect(65);
    $alphaModulate->setAmount(60);

    $uniformAlphaFrame = $slide->getShapes()->addPictureFrame(ShapeType::Rectangle, 20, 180, 200, 140, $image);
    $uniformAlphaFrame->getPictureFormat()->getPicture()->getImageTransform()->addAlphaReplaceEffect(55);

    $binaryAlphaFrame = $slide->getShapes()->addPictureFrame(ShapeType::Rectangle, 240, 180, 200, 140, $image);
    $alphaBiLevel = $binaryAlphaFrame->getPictureFormat()->getPicture()->getImageTransform()->addAlphaBiLevelEffect(50);
    $alphaBiLevel->setThreshold(45);
    $binaryAlphaFrame->getPictureFormat()->getPicture()->getImageTransform()->addAlphaInverseEffect();

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

파라미터가 없는 다른 알파 작업으로는 addAlphaCeilingEffect가 있으며, 이는 0이 아닌 모든 알파를 완전 불투명하게 만들고, addAlphaFloorEffect는 100% 이하 모든 알파를 완전 투명하게 만들며, addAlphaInverseEffect는 알파를 100% - alpha로 바꿉니다.

순서가 지정된 효과 체인 구축

add...Effect 메서드는 새 작업을 컬렉션 끝에 추가합니다. 렌더러는 컬렉션을 순서가 지정된 파이프라인으로 사용합니다: 작업 0의 출력이 작업 1의 입력이 되고, 이렇게 계속됩니다. 따라서 같은 작업이라도 순서가 다르면 다른 이미지를 생성할 수 있습니다.

예를 들어, 그레이스케일 뒤에 색조를 적용하면 색조 정보가 먼저 제거된 후 색조가 다시 적용됩니다. 색조 뒤에 그레이스케일을 적용하면 색조가 다시 사라집니다. 마찬가지로 알파 교체는 앞선 작업에서 계산된 알파값을 덮어쓸 수 있지만, 알파 변조는 상대적인 차이를 유지합니다.

다음 예시는 네 개 작업으로 구성된 체인을 만들고 PPTX로 저장한 뒤 프레젠테이션을 다시 열어 작업 유형과 순서를 확인하고 다시 연 결과를 렌더링합니다.

use aspose\slides\ImageFormat;
use aspose\slides\Images;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\ShapeType;

$presentation = new Presentation();
try {
    $slide = $presentation->getSlides()->get_Item(0);

    $sourceImage = Images::fromFile("photo.png");
    try {
        $image = $presentation->getImages()->addImage($sourceImage);
    } finally {
        if (!java_is_null($sourceImage)) {
            $sourceImage->dispose();
        }
    }

    $pictureFrame = $slide->getShapes()->addPictureFrame(ShapeType::Rectangle, 50, 50, 400, 260, $image);
    $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", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

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

    if (java_instanceof($reopenedShape, new JavaClass("com.aspose.slides.PictureFrame"))) {
        $reopenedTransform = $reopenedShape->getPictureFormat()->getPicture()->getImageTransform();
        $orderIsPreserved = java_values($reopenedTransform->size()) === 4 && 
            java_instanceof($reopenedTransform->get_Item(0), new JavaClass("com.aspose.slides.GrayScale")) && 
            java_instanceof($reopenedTransform->get_Item(1), new JavaClass("com.aspose.slides.Tint")) && 
            java_instanceof($reopenedTransform->get_Item(2), new JavaClass("com.aspose.slides.Blur")) && 
            java_instanceof($reopenedTransform->get_Item(3), new JavaClass("com.aspose.slides.AlphaModulateFixed"));
        echo $orderIsPreserved ? "The effect chain was preserved." : "The effect chain changed during the round trip.";

        $renderedSlide = $reopenedPresentation->getSlides()->get_Item(0)->getImage();
        try {
            $renderedSlide->save("reopened-effect-chain.png", ImageFormat::Png);
        } finally {
            if (!java_is_null($renderedSlide)) {
                $renderedSlide->dispose();
            }
        }
    } else {
        echo "The reopened shape is not a picture frame.";
    }
} finally {
    $reopenedPresentation->dispose();
}

컬렉션은 색상, 알파 및 흐림 작업을 별도 체인으로 제한하는 호환성 매트릭스를 강제하지 않습니다. 이들은 결합될 수 있지만 조합이 언제나 유용한 것은 아닙니다. 고정 색상 교체는 이전 색상 효과가 만든 RGB 변화를 제거하고, 듀오톤 뒤에 그레이스케일을 적용하면 두 선택 색상이 사라지며, 알파 천장·바닥·교체·이중 레벨 작업은 앞서 만든 알파 디테일을 없앨 수 있습니다. 원하는 픽셀 처리 순서에 따라 체인을 구성하고, 항목을 무순서 서식 플래그처럼 취급하지 마십시오.

편집 가능 및 유효값 검사

편집 가능한 작업은 Picture::getImageTransform에 저장된 객체입니다. 효과에 따라 직접 쓸 수 있는 멤버를 노출할 수 있습니다. 예를 들어, Blurradiusgrow 값을 쓸 수 있게 하고, AlphaModulateFixedamount를, AlphaBiLevelthreshold를 쓸 수 있게 합니다. Duotone과 같은 색상 효과는 변경 가능한 ColorFormat 객체를 노출합니다.

Luminance, HSL, TintAlphaReplace와 같은 일부 작업은 생성 스칼라를 쓰기 가능한 속성으로 노출하지 않습니다. 이러한 설정을 변경하려면 작업을 제거하고 필요한 위치에 교체 작업을 추가하십시오.

getEffective()가 반환하는 유효 데이터는 계산된 읽기 전용 값입니다. 테마 의존 색상을 해결하고 렌더러가 사용하는 정규화 값을 읽는 데 유용하지만 다른 편집 표면은 아닙니다. 다음 예시는 체인을 열거하고 해당 API가 제공하는 경우 유효값을 검사합니다.

use aspose\slides\Presentation;

$presentation = new Presentation("image-transform-chain.pptx");
try {
    $slide = $presentation->getSlides()->get_Item(0);
    $pictureFrame = null;
    $shapeCount = java_values($slide->getShapes()->size());

    for ($index = 0; $index < $shapeCount; $index++) {
        $shape = $slide->getShapes()->get_Item($index);
        if (java_instanceof($shape, new JavaClass("com.aspose.slides.PictureFrame"))) {
            $pictureFrame = $shape;
            break;
        }
    }

    if ($pictureFrame !== null) {
        $imageTransform = $pictureFrame->getPictureFormat()->getPicture()->getImageTransform();
        $effectCount = java_values($imageTransform->size());

        for ($index = 0; $index < $effectCount; $index++) {
            $operation = $imageTransform->get_Item($index);
            echo $index . ": " . java_values($operation->getClass()->getSimpleName()) . PHP_EOL;

            if (java_instanceof($operation, new JavaClass("com.aspose.slides.Luminance"))) {
                $data = $operation->getEffective();
                echo "  Brightness: " . java_values($data->getBrightness()) . PHP_EOL;
                echo "  Contrast: " . java_values($data->getContrast()) . PHP_EOL;
            } elseif (java_instanceof($operation, new JavaClass("com.aspose.slides.Duotone"))) {
                $data = $operation->getEffective();
                echo "  Dark color: " . java_values($data->getColor1()->toString()) . PHP_EOL;
                echo "  Light color: " . java_values($data->getColor2()->toString()) . PHP_EOL;
            } elseif (java_instanceof($operation, new JavaClass("com.aspose.slides.ColorReplace"))) {
                $data = $operation->getEffective();
                echo "  Replacement color: " . java_values($data->getColor()->toString()) . PHP_EOL;
            } elseif (java_instanceof($operation, new JavaClass("com.aspose.slides.HSL"))) {
                $data = $operation->getEffective();
                echo "  HSL: " . java_values($data->getHue()) . ", " . java_values($data->getSaturation()) . ", " . java_values($data->getLuminance()) . PHP_EOL;
            } elseif (java_instanceof($operation, new JavaClass("com.aspose.slides.Tint"))) {
                $data = $operation->getEffective();
                echo "  Tint: " . java_values($data->getHue()) . ", " . java_values($data->getAmount()) . PHP_EOL;
            } elseif (java_instanceof($operation, new JavaClass("com.aspose.slides.Blur"))) {
                $data = $operation->getEffective();
                echo "  Blur radius: " . java_values($data->getRadius()) . " pt" . PHP_EOL;
            } elseif (java_instanceof($operation, new JavaClass("com.aspose.slides.AlphaModulateFixed"))) {
                $data = $operation->getEffective();
                echo "  Alpha amount: " . java_values($data->getAmount()) . "%" . PHP_EOL;
            } elseif (java_instanceof($operation, new JavaClass("com.aspose.slides.AlphaReplace"))) {
                $data = $operation->getEffective();
                echo "  Replacement alpha: " . java_values($data->getAlpha()) . "%" . PHP_EOL;
            } elseif (java_instanceof($operation, new JavaClass("com.aspose.slides.AlphaBiLevel"))) {
                $data = $operation->getEffective();
                echo "  Alpha threshold: " . java_values($data->getThreshold()) . "%" . PHP_EOL;
            }
        }
    }
} finally {
    $presentation->dispose();
}

그레이스케일, 알파 천장, 알파 역전과 같은 파라미터가 없는 효과도 유효 데이터 객체를 가지지만 출력할 스칼라 설정이 없습니다. 컬렉션 내 존재와 위치가 중요한 정보입니다.

이미지 변환 제거 또는 전체 지우기

ImageTransformOperationCollection::removeAt를 사용하면 인덱스로 하나의 작업을 제거할 수 있습니다. 인덱스는 제거 후 이동하므로 먼저 대상 작업을 찾아 열거한 뒤 제거하십시오. ImageTransformOperationCollection::clear를 사용하면 전체 체인을 제거합니다.

use aspose\slides\Presentation;
use aspose\slides\SaveFormat;

$presentation = new Presentation("image-transform-chain.pptx");
try {
    $slide = $presentation->getSlides()->get_Item(0);
    $pictureFrame = null;
    $shapeCount = java_values($slide->getShapes()->size());

    for ($index = 0; $index < $shapeCount; $index++) {
        $shape = $slide->getShapes()->get_Item($index);
        if (java_instanceof($shape, new JavaClass("com.aspose.slides.PictureFrame"))) {
            $pictureFrame = $shape;
            break;
        }
    }

    if ($pictureFrame !== null) {
        $imageTransform = $pictureFrame->getPictureFormat()->getPicture()->getImageTransform();
        $effectCount = java_values($imageTransform->size());
        $blurIndex = -1;

        for ($index = 0; $index < $effectCount; $index++) {
            if (java_instanceof($imageTransform->get_Item($index), new JavaClass("com.aspose.slides.Blur"))) {
                $blurIndex = $index;
                break;
            }
        }

        if ($blurIndex >= 0) {
            $imageTransform->removeAt($blurIndex);
            echo "The blur operation was removed." . PHP_EOL;
        }

        $imageTransform->clear();
        echo "Remaining operations: " . java_values($imageTransform->size()) . PHP_EOL;
        $presentation->save("image-transforms-cleared.pptx", SaveFormat::Pptx);
    }
} finally {
    $presentation->dispose();
}

변환을 제거하거나 지우면 사진 서식만 변경됩니다. 재사용되는 PPImage 리소스가 삭제, 재압축 또는 다른 방식으로 변경되지 않습니다.

프레젠테이션 형식 및 내보내기 대상 고려

이미지 변환은 DrawingML에서 유래하므로 PPTX가 효과 체인에 가장 적합한 편집 가능한 형식입니다. PPTX라 하더라도 모든 작업이 동일한 이식성을 보장하지는 않습니다.

  • DrawingML 표준 작업(밝기, 그레이스케일, 듀오톤, 색조, HSL, 흐림 및 일반 알파 작업)은 PPTX 라운드 트립에서 살아남을 가능성이 가장 높습니다. 보존이 필요하면 항상 생성된 파일을 다시 열어 컬렉션을 확인하십시오.
  • 바이너리 PPT 형식은 전체 DrawingML 효과 모델보다 먼저 등장했습니다. PPT로 저장하면 지원되지 않는 작업이 생략되거나 체인이 지원되는 하위 집합으로 축소되거나 근사화될 수 있습니다. 복잡한 편집 가능한 체인의 검증 형식으로 PPT를 사용하지 마십시오.
  • PNG, JPEG, TIFF, PDF, SVG, HTML 등 시각적 출력 형식은 지원되는 체인을 렌더링된 모습에 적용합니다. 이러한 출력에는 편집 가능한 ImageTransformOperationCollection이 포함되지 않으며, 래스터 형식은 결과를 픽셀로 평탄화하고 문서·벡터 형식은 자체 렌더링 표현을 저장합니다.
  • 효과는 연결된 이미지를 자체 포함형으로 만들지 않습니다. 연결된 사진을 렌더링하려면 프레젠테이션이 로드될 때 해당 리소스가 사용 가능해야 합니다.

여러 알파 또는 색상 양자화 작업이 결합될 경우 가장자리 사례가 다르게 렌더링될 수 있습니다. 중요한 출력물은 편집 가능한 라운드 트립과 최종 내보내기 형식을 모두 동일한 Aspose.Slides 버전으로 테스트하십시오.

FAQ

이미지 변환 효과가 임베디드 이미지 데이터를 수정합니까?

아니오. 작업은 사진 채우기에 사용되는 Picture에 속하며, 기본 PPImage 바이트는 변경되지 않습니다.

같은 이미지를 재사용하는 두 사진 프레임이 효과를 공유합니까?

아니오. PPImage를 재사용하면 이미지 데이터 중복을 피하지만 각 사진 프레임은 일반적으로 별도의 Picture와 이미지 변환 컬렉션을 가집니다.

색상, 흐림 및 알파 효과를 결합할 수 있습니까?

예. 컬렉션은 하나의 순서가 지정된 체인으로 이를 허용합니다. 교체 및 임계값 작업은 이전 색상 또는 알파 디테일을 삭제할 수 있으므로 각 작업이 이전 작업 결과에 어떤 영향을 미치는지 고려하십시오.

유효값이 읽기 전용인 이유는 무엇입니까?

유효 데이터는 렌더링에 사용되는 계산값(해결된 색상 포함)을 나타냅니다. 쓰기 가능한 멤버가 있는 경우 변환 컬렉션에 저장된 작업을 편집하고, 그렇지 않으면 해당 작업을 제거하고 새 생성 파라미터로 교체하십시오.

어떤 형식이 변환 체인을 보존하기에 적합합니까?

PPTX를 사용하고 파일을 다시 열어 확인하십시오. 레거시 PPT는 전체 DrawingML 효과 모델을 표현할 수 없으며, 렌더링 내보내기 형식은 편집 가능한 변환 작업이 아니라 외관만 보존합니다.