根据给出的答案和你的评论,简短的回答是:你不能做你想做的事。应用蒙版后,将渲染图层并丢弃看不见的图像数据。
编辑:
我制作了一些示例 png 文件,然后使用 php 来操作它们(源代码如下)。
如果我创建一个具有随机透明度的 png 并在图层具有蒙版时保存,那么无论是否启用了 alpha 支持,100% 透明区域(例如来自方框工具)都会显示为白色。包含一定量 100% 透明的渐变不会在禁用 alpha 的情况下显示。
如果我(永久)应用图层蒙版,然后创建 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);
?>