File size: 2,335 Bytes
38d647f 1eb15ec 7d9bafe 78489aa c5e2c4b 1eb15ec c5e2c4b 1eb15ec 646fd2e 7d9bafe 1eb15ec 646fd2e 066f283 646fd2e 1eb15ec c5e2c4b 066f283 c5e2c4b 066f283 c5e2c4b 066f283 9dff307 25569a9 c5e2c4b 066f283 646fd2e c5e2c4b 9dff307 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
import gradio as gr
import numpy as np
import zipfile
from io import BytesIO
from PIL import Image
import os
def cut_image(image, num_cuts_h, num_cuts_v):
width, height = image.size
cut_width = width // num_cuts_h
cut_height = height // num_cuts_v
parts = []
for i in range(num_cuts_v):
for j in range(num_cuts_h):
left = j * cut_width
upper = i * cut_height
right = left + cut_width
lower = upper + cut_height
parts.append(image.crop((left, upper, right, lower)))
return parts
def zip_images(images):
# Create a BytesIO object to hold the zip file
zip_buffer = BytesIO()
with zipfile.ZipFile(zip_buffer, 'w') as zipf:
for idx, img in enumerate(images):
# Save each image to the zip file
img_buffer = BytesIO()
img = Image.fromarray(img) # Convert NumPy array to PIL Image
img.save(img_buffer, format='PNG')
img_buffer.seek(0)
zipf.writestr(f'image_{idx}.png', img_buffer.getvalue())
zip_buffer.seek(0)
return zip_buffer
def process_image(image, num_cuts_h, num_cuts_v):
# Split the image into a grid of frames
cut_parts = cut_image(image, num_cuts_h, num_cuts_v)
#frames = split_image_grid(image, grid_cols_input, grid_rows_input)
# Zip the frames into a single zip file
zip_file = zip_images(cut_parts)
return zip_file
with gr.Blocks() as demo:
with gr.Row():
image_input = gr.Image(label="Input Image", type="filepath")
num_cuts_h = gr.Slider(minimum=2, maximum=8, default=3, step=1, label="Number of horizontal cuts/slices")
num_cuts_v = gr.Slider(minimum=2, maximum=8, default=3, step=1, label="Number of vertical cuts/slices")
gif_duration = gr.Slider(minimum=5, maximum=1000, default=150, step=5, label="GIF duration (ms)")
ping_pong_checkbox = gr.Checkbox(label="Ping-pong animation", default=True)
zip_output = gr.File(label="Output Zip File")
process_button = gr.Button("Process Image")
# process_button.click(process_image, inputs=[image_input, num_cuts_h, num_cuts_v, gif_duration, ping_pong_checkbox], outputs=zip_output)
process_button.click(process_image, inputs=[image_input, num_cuts_h, num_cuts_v], outputs=zip_output)
demo.launch(show_error=True) |