How to merge images into a single strip
You can create an empty texture of size of the resulting image strip and alpha over all of your images over it in compositor and translate them with translate node into positions and render it:

With python:


load in you image textures:

import bpy

def load_image(file_path):
    try:
        return bpy.data.images.load(filepath)
    except:
        raise NameError("Cannot load image %s" % filepath)

image_names = ['first.png', 'second.jpg', 'third.bmp']
images = []
for name in image_names:
    real_path = bpy.abspath('//' + name)
    images.append(load_image(real_path))

Get image dimension:

images[0].size[0]    # resolution x
images[0].size[1]    # resolution y

Create empty image of desired resolution for example 1024x256:

bg = bpy.ops.image.new(name="bg", width=1024, height=256, alpha=False)

How to create nodes in compositor and link them:

Controling compositor by python
Render:

render = bpy.context.scene.render
# set this
render.resolution_x = 1024
render.resolution_y = 256
# render image
render.render()
# use File_Output node or specify render.filepath to also save the result



Getting low level with manipulating image pixels:

# you get float values for each pixel like this:
# in png they are stored nicely in rgba order
image = bpy.data.images['SOME_NAME.PNG']
for i in range(0, len(image.pixels), 4):
    rgba = image.pixels[i:i+4]
    # this is also writable ofc


There are couple things to keep in mind though:


Blender uses opengl internally so the origin is in the lower left corner of the image (with the y-axis pointing upwards).
Some image programs might not save the transparency pixels
The image might have alpha premultiplied, but this shouldn't be a concern. In that case the values are in form of [r * a, g * a, b * a, a]