我正在寻找一种通过使用其 aplha 通道在图像中创建透明区域的方法。
我刚刚找到了这种方式:
定义一种颜色并将其设置为透明。
imagealphablending($img, false); // has to be false for imagecolortransparent
imagesavealpha($img, false); // false = single color transparency
$mask_color = imagecolorallocatealpha($img, 0, 255, 0, 127);
imagecolortransparent( $img, $mask_color );
但结果是单色透明。如果我尝试将其与具有 alpha 通道的图像合并,则蒙版颜色会再次可见。
这发生在我再次启用 imagesavealpha() 的那一刻,这是合并过程所需的。
顺便说一句:我通过将源图像与蒙版图像合并来创建$img。
$new_img = imagecreatetruecolor( 150, 100 );
$new_white = imagecolorallocatealpha( $new_img, 255, 255, 255, 0 );
imagefill( $new_img, 0, 0, $new_white );
imagealphablending($new_img, false); // has to be false for full alpha
imagesavealpha($new_img, true); // true = full alpha channel
imagecopyresampled( $new_img, $img ,0, 0, 0, 0, 150, 100, 150, 100);
imagecopyresampled( $new_img, $alpha_img ,0, 0, 0, 0, 150, 100, 150, 100);
// save preview
imagepng( $new_img, $image_path . $preview_dir_name . $new_file_name );
$img中的透明区域现在再次可见。
那么,有没有办法通过使用完整的 Alpha 通道使特定的彩色区域透明?