IAimage / app.py
onnew's picture
Update app.py
0a8c67b verified
raw
history blame
2.55 kB
import gradio as gr
from PIL import Image, ImageDraw
# Configurações gerais
GRID_SIZE = 32 # Tamanho da grade
PIXEL_SIZE = 20 # Tamanho de cada pixel no desenho
CANVAS_SIZE = GRID_SIZE * PIXEL_SIZE # Tamanho total do canvas
FRAME_COUNT = 4 # Número de frames padrão na animação
# Função para criar uma imagem em branco
def create_blank_frame():
return Image.new("RGB", (GRID_SIZE, GRID_SIZE), color="white")
# Função para desenhar no frame
def draw_pixel(frame, x, y, color):
draw = ImageDraw.Draw(frame)
draw.rectangle(
[x, y, x + 1, y + 1], fill=color
) # Cada pixel é um pequeno quadrado 1x1
return frame
# Função para converter frames em um GIF
def create_animation(frames, duration):
gif_path = "animation.gif"
frames[0].save(
gif_path,
save_all=True,
append_images=frames[1:],
duration=duration,
loop=0,
)
return gif_path
# Função principal do editor
def editor(frames, frame_index, x, y, color, duration):
frame = frames[frame_index]
frame = draw_pixel(frame, x, y, color)
frames[frame_index] = frame
gif_path = create_animation(frames, duration)
return gif_path, frames
# Inicializa frames em branco
initial_frames = [create_blank_frame() for _ in range(FRAME_COUNT)]
# Interface com Gradio
with gr.Blocks() as app:
gr.Markdown("# Editor de Sprites e Animação")
with gr.Row():
canvas = gr.Image(label="Canvas", type="pil", tool=None)
with gr.Row():
with gr.Column():
gr.Markdown("### Ferramentas de Desenho")
x = gr.Slider(0, GRID_SIZE - 1, step=1, label="Posição X")
y = gr.Slider(0, GRID_SIZE - 1, step=1, label="Posição Y")
color = gr.ColorPicker(label="Cor", value="#ff0000")
frame_index = gr.Slider(
0, FRAME_COUNT - 1, step=1, label="Frame Atual"
)
duration = gr.Slider(50, 500, step=10, label="Duração (ms)", value=100)
with gr.Column():
gr.Markdown("### Animação")
animation_output = gr.Image(label="Prévia da Animação")
with gr.Row():
update_button = gr.Button("Atualizar Frame")
save_button = gr.Button("Salvar Animação")
# Estados
frames_state = gr.State(value=initial_frames)
# Atualizar o frame
update_button.click(
editor,
inputs=[frames_state, frame_index, x, y, color, duration],
outputs=[animation_output, frames_state],
)
app.launch()