Jump to content
You must now use your email address to sign in [click for more info] ×

Script to create image arrays


Recommended Posts


I needed to create arrays of images to show a distribution. Say you wanted to display the amount of male to female workers, or, like in my case the number of nominations in relation to the numbers of wins.

So, I wrote a simple python script to do it. It's using graphicsmagick (http://www.graphicsmagick.org/) for the actual image stuff.

It works like size: You give it a number of images, and specify how many of these images you want. By default it will arrange those images in a square grid, but you can also specify the number of columns you want to produce different layouts. You can specify the size of a cell and the border around it. 

It will create a single output file using this data, which you can then use in your Affinity tools.

Right now it displays the images in order, but I could change it to display them randomly if needed.

import math
import os

# the number per image type
counts = [94,199]
# the actual filenames to use
images = ["A.png", "B.png"]
# what should be produced
outFilename = "out.png"

# size of the cells
cellWidth  = 100
cellHeight = 100

# number of columns. If set to zero, it will create
# a layout with the same number of rows and columns.
columns = 0

# ----------------------------------
# Implementation
# Basically, it creates list of files for 
# graphicsmagick's (http://www.graphicsmagick.org/montage.html) 
# montage tool.
# On a mac you can use
#   brew install graphicsmagick
# in a terminal to install graphicsmagick if you don't have it already

total = 0
for count in counts:
    total += count

if ( columns == 0 ):
    columns = math.ceil( math.sqrt( total ) )

rows = math.ceil( total / columns )

totalRemaining = total
curType = 0
typeRemaining = counts[curType]
params = ""
while totalRemaining > 0:
    params += images[curType] + " "
    totalRemaining = totalRemaining - 1
    typeRemaining  = typeRemaining  - 1

    if typeRemaining == 0:
        # switch to next image
        curType = curType + 1
        typeRemaining = counts[ min(curType, len(images)-1 )]

# call graphicsmagick to do the hard work for us:
os.system( f'gm montage -background none -geometry {cellWidth}x{cellHeight}+10+10 -tile {columns}x{rows} {params} {outFilename}')

Maybe it's something you can find use for.

If you're on a mac, you can use 


brew install graphicsmagick

on the command line to install it.


I hope this is in the correct forum, tand that somebody might find this useful.





Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Create New...

Important Information

Terms of Use | Privacy Policy | Guidelines | We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.