### Godot version

2a0aef5f09

### System information

Windows 11, Ryzen 9 5950X, RTX 3090 (531.79) Vulkan, 64GB RAM

### Issue description

The issue occurs due to two things.
When textures/images are imported, the `fix_alpha_edges` / `fix_alpha_borders` function in the importer will modify the color values but leaves the alpha values unchanged.

Later, when using the `_convert` function in the `image.cpp` file or `Image::convert` to convert from `Image::FORMAT_RGBA` to `Image::FORMAT_L8` the following image results (raw on top, conversion on bottom).
![Clipboard - May 22, 2023 8_13 PM](https://github.com/godotengine/godot/assets/5207577/52f4597e-17b6-48c5-8fb4-d6d37012d8f4)

I, originally, thought that the `fix_alpha_edges` / `fix_alpha_borders` code was at fault but it turns out to not necessarily be the case.  I modified the `_convert` function in `image.cpp` to calculate grayscale values correctly and to consider the alpha channel or not and now I'm getting the expected output as shown here:
![Clipboard - May 23, 2023 7_16 AM](https://github.com/godotengine/godot/assets/5207577/73babb20-22bb-4f23-808f-5d49dce55f2d)


### Steps to reproduce

Import `Image::FORMAT_RGBA` image into any project.

Convert image in code by calling the `convert` function to `Image::FORMAT_L8`.

Screen shot of MRP here:
![image](https://github.com/godotengine/godot/assets/5207577/9d7d0078-5e41-45d1-b5c5-fc291b839fa9)


### Minimal reproduction project

Attached now
[Issue_77393.zip](https://github.com/godotengine/godot/files/11545149/Issue_77393.zip)

if (nm->is_compressed()) {
		nm->decompress();
	}
	normal_w = nm->get_width();
	normal_h = nm->get_height();
	normal_sat_vec.resize(normal_w * normal_h * 3);
	normal_sat = normal_sat_vec.ptrw();
	
	for (int y = 0; y < normal_h; y++) {
		double line_sum[3] = { 0, 0, 0 };
		for (int x = 0; x < normal_w; x++) {
			double normal[3];
			Color color = nm->get_pixel(x, y);
			normal[0] = color.r * 2.0 - 1.0;
			normal[1] = color.g * 2.0 - 1.0;
			normal[2] = Math::sqrt(MAX(0.0, 1.0 - (normal[0] * normal[0] + normal[1] * normal[1]))); 
			line_sum[0] += normal[0];
			line_sum[1] += normal[1];
			line_sum[2] += normal[2];
			uint32_t ofs = (y * normal_w + x) * 3;
			normal_sat[ofs + 0] = line_sum[0];
			normal_sat[ofs + 1] = line_sum[1];
			normal_sat[ofs + 2] = line_sum[2];
			if (y > 0) {
				uint32_t prev_ofs = ((y - 1) * normal_w + x) * 3;
				normal_sat[ofs + 0] += normal_sat[prev_ofs + 0];
				normal_sat[ofs + 1] += normal_sat[prev_ofs + 1];
				normal_sat[ofs + 2] += normal_sat[prev_ofs + 2];
			}
		}