If you only need to build your Image one time ( not each frame ), i think your best choice is to use the blend_rect method defined in the Image class.
it should be something like :
[target image].blend_rect( [source Image], Rect2( [ region to take from source image ] ), Vector2( [ coords to blend to in target image ] ) )
then you can just save the new image :
[target image].save( '[image name].png' )
if your image is linked to an ImageTexture class, to see any change ingame you need to "commit" your modifications :
[ImageTexture].set_data( [target image] ).