I want to stack raster files (.tiff) and create a new raster (.tiff). The input raster files are RGB and need to be combined without color change. Can anyone help me to stack them and combine a new RGB file?
Example to clear things up: inputfile1.tif contains a red A inputfile2.tif contains a blue C inputfile3.tif contains a green S ... ... inputfile15.tif contains a purple X
outputfile.tif contains red A, blue C, green S, ..., purple X
Assuming you have a folder named tiffs
with the following images:
inputfile01.tif
inputfile02.tif
inputfile03.tif
inputfile15.tif
The following script uses the third-party module PIL
to open your .tif
images, and generates a composite image. You didn't specify how they should be stitched together, so this script just puts them next to each other in a single row, from left to right. It inserts them in the order in which pathlib.Path.glob
discovered the image file paths - in this case in lexicographical order (that's why I added a leading zero to the file names where normally there would be just a single digit).
def main():
from PIL import Image
from pathlib import Path
from itertools import accumulate
paths = Path("tiffs").glob("*.tif")
images = list(map(Image.open, paths))
offsets = list(accumulate((image.size[0] for image in images), initial=0))
width = offsets[-1]
height = max(image.size[1] for image in images)
composite = Image.new("RGB", (width, height))
for x_offset, image in zip(offsets, images):
composite.paste(image, (x_offset, 0))
image.close()
composite.show()
return 0
if __name__ == "__main__":
import sys
sys.exit(main())
Output:
This should work for any number of images, with any file name.