根据给出的答案和您的评论,简短的答案是:您无法做自己想做的。应用蒙版后,将渲染该图层,并丢弃看不见的图像数据。
编辑:
我制作了一些示例png文件,然后使用php对其进行了操作(下面的源代码)。
如果我创建具有随机透明度的png并在图层具有蒙版的情况下保存,则无论是否启用了alpha支持,100%的空白区域(例如来自框工具的区域)均显示为白色。禁用了alpha时,不会显示包含100%透明色的渐变。
如果我(永久)应用图层蒙版,然后创建png,那么如果禁用了alpha,则php会提供原始图像。
因此,可能的解决方法是找到一个不支持alpha 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);
?>
要提取alpha(请注意:php的GD限制为128级alpha,而不是256级),因此会损失一些精度。可以使用关卡工具将Alpha拉伸至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);
?>