From 3f2f5f9403ac43b57afc246c4f27d3138f81863a Mon Sep 17 00:00:00 2001 From: Paul Oliver Date: Thu, 29 Feb 2024 01:50:44 +0100 Subject: Added imager plugin. --- plugins/imager.py | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100755 plugins/imager.py (limited to 'plugins') diff --git a/plugins/imager.py b/plugins/imager.py new file mode 100755 index 0000000..7c26092 --- /dev/null +++ b/plugins/imager.py @@ -0,0 +1,40 @@ +#!/usr/bin/python3 +""" +This script generates an PNG image from a SALIS save file (or a list of saved +files), on which each pixel corresponds to a single byte on the simulation. +It's useful for identifying large scale structures and appreciating the +large-scale evolution of the world. + +Tu run it, simply call it from within the ./bin/ directory inside the SALIS +main directory, such as: + +../plugins/imager.py def.sim.* + +Calling this will create a PNG image for each file beggining with "def.sim". +""" +import sys +from ctypes import * +from PIL import Image +files = sys.argv[1:] +salis = CDLL("libsalis.so") +salis.sm_getSize.restype = c_uint + +def makeImage(iname): + salis.s_load(bytes(iname, "utf-8")) + lsize = int(salis.sm_getSize() ** 0.5) + image = Image.new("RGB", (lsize, lsize), "black") + pixels = image.load() + + for y in range(lsize): + for x in range(lsize): + addr = (y * lsize) + x + byte = salis.sm_getByteAt(addr) + pixels[x, y] = (byte // 4, byte // 2, byte) + + salis.s_quit() + oname = iname + ".png" + image.save(oname) + print(oname + " generated") + +for f in files: + makeImage(f) -- cgit v1.2.1