Michael Pilosov, PhD
9 months ago
3 changed files with 61 additions and 7 deletions
@ -0,0 +1,54 @@ |
|||||
|
import pyvips |
||||
|
import glob |
||||
|
import random |
||||
|
import os |
||||
|
import math |
||||
|
|
||||
|
|
||||
|
def create_grid_composite( |
||||
|
directory, k, spacing_inches, output_file="output.png", dpi=300 |
||||
|
): |
||||
|
# Calculate spacing in pixels |
||||
|
spacing_pixels = int(spacing_inches * dpi) |
||||
|
|
||||
|
# Glob for PNG images |
||||
|
png_files = glob.glob(os.path.join(directory, "*.png")) |
||||
|
|
||||
|
# Randomly select K^2 images |
||||
|
selected_files = random.sample(png_files, k * k) |
||||
|
|
||||
|
# Create an empty list to hold the images |
||||
|
images = [ |
||||
|
pyvips.Image.new_from_file(file, access="sequential") for file in selected_files |
||||
|
] |
||||
|
|
||||
|
# Calculate the size of the composite image |
||||
|
widths, heights = zip(*[image.size for image in images]) |
||||
|
max_width = max(widths) |
||||
|
max_height = max(heights) |
||||
|
|
||||
|
# Calculate total size of the grid including spacing |
||||
|
total_width = k * max_width + (k + 1) * spacing_pixels |
||||
|
total_height = k * max_height + (k + 1) * spacing_pixels |
||||
|
|
||||
|
# Create a blank image for the composite |
||||
|
composite = pyvips.Image.black(total_width, total_height) |
||||
|
|
||||
|
# Place images into the composite |
||||
|
for i, image in enumerate(images): |
||||
|
row = i // k |
||||
|
col = i % k |
||||
|
x = col * (max_width + spacing_pixels) + spacing_pixels |
||||
|
y = row * (max_height + spacing_pixels) + spacing_pixels |
||||
|
composite = composite.insert(image, x, y) |
||||
|
|
||||
|
# Save the composite image |
||||
|
composite.write_to_file(output_file) |
||||
|
|
||||
|
|
||||
|
if __name__ == "__main__": |
||||
|
# Example usage |
||||
|
directory = "/teamspace/studios/this_studio/out_sortcolors/umap/" # Change to your directory path |
||||
|
k = 3 # For a 3x3 grid |
||||
|
spacing_inches = 0.5 # Half an inch between images |
||||
|
create_grid_composite(directory, k, spacing_inches) |
Loading…
Reference in new issue