### 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 0
	{
		Vector3 beg(normal_sat_vec[0], normal_sat_vec[1], normal_sat_vec[2]);
		Vector3 end(normal_sat_vec[normal_sat_vec.size() - 3], normal_sat_vec[normal_sat_vec.size() - 2], normal_sat_vec[normal_sat_vec.size() - 1]);
		Vector3 avg = (end - beg) / (normal_w * normal_h);
		print_line("average: " + avg);
	}
#endif
	int mmcount;
	_get_dst_image_size(width, height, format, mmcount);
	uint8_t *base_ptr = data.ptrw();
	for (int i = 1; i <= mmcount; i++) {
		int ofs, w, h;
		_get_mipmap_offset_and_size(i, ofs, w, h);
		uint8_t *ptr = &base_ptr[ofs];
		for (int x = 0; x < w; x++) {
			for (int y = 0; y < h; y++) {
				int from_x = x * normal_w / w;
				int from_y = y * normal_h / h;
				int to_x = (x + 1) * normal_w / w;
				int to_y = (y + 1) * normal_h / h;
				to_x = MIN(to_x - 1, normal_w);
				to_y = MIN(to_y - 1, normal_h);
				int size_x = (to_x - from_x) + 1;
				int size_y = (to_y - from_y) + 1;
				
				double avg[3] = { 0, 0, 0 };
				if (from_x > 0 && from_y > 0) {
					uint32_t tofs = ((from_y - 1) * normal_w + (from_x - 1)) * 3;