与えられた答えとあなたのコメントに基づいて、短い答えは次のとおりです。あなたがしたいことをすることはできません。マスクを適用すると、レイヤーがレンダリングされ、表示されていない画像データが破棄されます。
編集:
サンプルpngファイルをいくつか作成し、phpを使用してそれらを操作しました(以下のソースコード)。
レイヤーにマスクがあるときにランダムな透明度でpngを作成して保存すると、アルファサポートが有効になっているかどうかにかかわらず、100%クリア領域(ボックスツールなど)が白で表示されます。ある程度の100%クリアを含むグラデーションは、アルファを無効にすると表示されません。
レイヤーマスクを(永続的に)適用してからpngを作成すると、アルファが無効になっている場合、phpは元の画像を提供します。
したがって、これに対する潜在的な回避策は、アルファPNGをサポートしないソフトウェアパッケージを見つけて、そこから再保存することです。元のマスクの回復については、まだ見ていません。
両方のコードサンプルは、概念実証と低速です。
<?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);
?>