我感觉你理解错了 Blending 的意思, 尤其是 src 和 dst 的意思.
https://learnopengl-cn.readthedocs.io/zh/latest/04%20Advanced%20OpenGL/03%20Blending/
所以我觉得通过混色是无法实现你的目的的, 有两个方案:
- 通过 PS 修改原图(图1) 让紫色部分带有透明度.
- 写一个 shader, 在 frag 中处理颜色, 判断如果当前色是紫色的话, 重新复制当前色的 alpha 值, 但是可能会 ‘误伤’.
我尝试了一下方案2, 效果如下:

左边是修改了alpha的, 右边是原图. 核心 shader 代码如下:
varying vec4 v_fragmentColor;
varying vec2 v_texCoord;
uniform float f_alpha;
void main()
{
vec4 v_orColor = v_fragmentColor * texture2D(CC_Texture0, v_texCoord);
v_orColor.a = (v_orColor.r == 1.0 && v_orColor.g == 0.0 && v_orColor.b >= 0.99) ? f_alpha : v_orColor.a;
gl_FragColor = v_orColor;
}
不知道能否帮到你, 另外我也只是了解皮毛, 希望能够抛砖引玉, 看看高手们是怎么做的.