When you do this:
Image(.background)
.resizable()
.scaledToFill()
.ignoresSafeArea()
You're telling SwiftUI that the image can be resized, and you want to scale it to fill its parent, so SwiftUI scales the image. However, at this point, SwiftUI doesn't know that the image can ignore the safe areas, so the parent view at that point isn't ignoring safe areas. That's why you get the white bit at the bottom.
I took your image and added a red border and yellow squares in the corners so I could see where the image was stretched/resized and positioned. With the code above, you get this:
So you can see it was resized to fit inside the parent view, and doesn't ignore the safe areas.
For your needs, just remove the .scaledToFill() modifier, you don't need it:
Image(.background)
.resizable()
.ignoresSafeArea()
This yields:
If your ultimate need is to get that last image with just the white bit at the bottom, the fix again is to remove the scaling:
Image(.background)
.resizable()
.ignoresSafeArea(edges: .top)