Rendering a Camera Background Image As Simply As Possible

you can use this code snippet. Its not perfectly coded, but it gets the first background image from the active camera and create some compositor nodes, to make the camera background visible in rendering.

import bpy
import sys

# general settings
bpy.context.scene.render.film_transparent = True
bpy.context.scene.use_nodes = True
compositor = bpy.context.scene.node_tree


#get background image struct
active_cam = bpy.context.scene.camera.name
bg_images = bpy.data.objects[active_cam].data.background_images.items()

# get background image data, if it exists in struct
try:
    image = bg_images[0][1].image
    image_scale = bg_images[0][1].scale
except:
    sys.exit("No Background Found")


# create new compositor node, if it not already exists
node_names = {"bg_image_node":"CompositorNodeImage", "alpha_over_node":"CompositorNodeAlphaOver", "frame_method_node":"CompositorNodeScale", "scale_node":"CompositorNodeScale"}
current_nodes = compositor.nodes.keys()

for name,type in node_names.items():
    if name not in current_nodes:
        node = compositor.nodes.new(type=type)
        node.name = name
        

#edit compositor nodes  
bg_image_node = compositor.nodes["bg_image_node"]
bg_image_node.image = image

alpha_over_node = compositor.nodes["alpha_over_node"]
alpha_over_node.location[0] = 600

frame_method_node = compositor.nodes["frame_method_node"]
frame_method_node.space = "RENDER_SIZE"
frame_method_node.location[0] = 200

scale_node = compositor.nodes["scale_node"]
scale_node.inputs[1].default_value = image_scale
scale_node.inputs[2].default_value = image_scale
scale_node.location[0] = 400


#link compositor nodes
compositor.links.new(compositor.nodes["Render Layers"].outputs[0], alpha_over_node.inputs[2])
compositor.links.new(bg_image_node.outputs[0], frame_method_node.inputs[0])
compositor.links.new(frame_method_node.outputs[0], scale_node.inputs[0])
compositor.links.new(scale_node.outputs[0], alpha_over_node.inputs[1])
compositor.links.new(alpha_over_node.outputs[0], compositor.nodes["Composite"].inputs[0])