주어진 답변과 귀하의 의견을 바탕으로, 짧은 대답은 : 당신이 원하는 것을 할 수 없습니다. 마스크를 적용하면 레이어가 렌더링되고 보이지 않는 이미지 데이터가 삭제됩니다.
편집하다:
샘플 png 파일을 만든 다음 php를 사용하여 조작했습니다 (아래 소스 코드).
임의의 투명도를 가진 png를 만들고 레이어에 마스크가있는 동안 저장하면 상자 지원 등의 100 % 투명 영역이 알파 지원의 사용 가능 여부에 따라 흰색으로 표시됩니다. 100 % 투명도가 포함 된 그라디언트는 알파가 비활성화 된 상태로 나타나지 않습니다.
레이어 마스크를 (영구적으로) 적용한 다음 png를 만들면 알파가 비활성화되어 있으면 php가 원본 이미지를 제공합니다.
따라서이를위한 잠재적 인 해결 방법은 알파 PNG를 지원하지 않는 소프트웨어 패키지를 찾아서 다시 저장하는 것입니다. 원래 마스크를 복구하는 것에 대해서는 아직 살펴 보지 않았습니다.
두 코드 샘플 모두 개념 증명과 SLOW입니다.
<?php
$im = imagecreatefrompng('./images/alphatest_nolayer.png');
$enable_alpha = 0; //set to 0 to disable aplha
if ($enable_alpha) {
imagealphablending($im, false);
imagesavealpha($im, true);
}
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
?>
알파를 추출하려면 (참고 : php에는 256이 아니라 128 레벨 알파의 GD 제한이 있으므로) 일부 정밀도가 손실됩니다. 레벨 도구를 사용하여 알파를 256으로 늘릴 수 있습니다)
<?php
$im = imagecreatefrompng('./images/alphatest_nolayer.png');
$w = imagesx($im);
$h = imagesy($im);
$om = imagecreatetruecolor($w,$h);
for ($x = 0; $x < $w; $x++) {
for ($y = 0; $y < $h; $y++) {
$rgb = imagecolorat($im, $x, $y);
$colors = imagecolorsforindex($im, $rgb);
$orgb = imagecolorallocate($om,$colors['alpha'],$colors['alpha'],$colors['alpha']);
imagesetpixel($om,$x,$y,$orgb);
}
}
header('Content-Type: image/png');
imagepng($om);
imagedestroy($om);
imagedestroy($im);
?>