Is there technical reason why Godot works like this?
Or am I missing some setting to make this work properly?

As the title describes, the logo's alpha channel is ignored.
I just changed CanvasItemMaterial > Blend Mode respectively.
An interesting thing is that "subtract" works fine in 3.5.1 but doesn't in 4.0 beta.

WORKAROUNDS

  1. Paint transparency area with white.
    This is not intuitive in my opinion.

2.Write a custom shader

shader_type canvas_item;

void fragment()
{
	vec4 baseColor = texture(TEXTURE,UV);
	vec4 blendColor = texture(SCREEN_TEXTURE,SCREEN_UV);

	COLOR = baseColor * blendColor;
}

Thanks to Godot Shaders. The alpha seems working but when I overlap two pictures, they don't work. I tried BackBufferCopy, which is explained here but I couldn't make it work.

I'm new to Godot and writing shaders so if I missed something, sorry in advance.

Sounds like it might be a bug. I would suggest opening a GitHub issue for the issue where subtract does not work with alpha in Godot 4.0 like it does in Godot 3.0, as that would be a functionality change. I know one of the Godot developers on Twitter were working on alpha and the shader modes, but alas I do not remember who and do not have a twitter account now to check... Opening an issue on GitHub should help though. Just make sure to do a search to check if there is already an issue open on the topic, and if there is, just add your comment/support there instead of making a new issue 🙂