Pixelate / app.py
slancheros's picture
Update app.py
a643a06 verified
Raw
History Blame Contribute Delete
2.56 kB
import gradio as gr
from PIL import Image, ImageDraw, ImageFont
def full_pixel_art_process_custom_grid(
image_path,
output_path,
grid_width=32,
grid_height=32,
pixel_size=32,
num_colors=8,
add_grid=True
):
# Open original image
image = Image.open(image_path)
# Resize down to grid resolution
image_small = image.resize((grid_width, grid_height), resample=Image.Resampling.BILINEAR)
# Reduce colors
image_small = image_small.convert('P', palette=Image.MESH, colors=num_colors)
# Resize back up using NEAREST to preserve hard edges
pixelated_image = image_small.resize(
(grid_width * pixel_size, grid_height * pixel_size),
resample=Image.Resampling.NEAREST
)
if add_grid:
draw = ImageDraw.Draw(pixelated_image)
font_size = max(10, pixel_size // 3)
try:
font = ImageFont.truetype("arial.ttf", font_size)
except:
font = ImageFont.load_default()
# Draw grid lines
for x in range(0, grid_width * pixel_size, pixel_size):
draw.line((x, 0, x, grid_height * pixel_size), fill="gray", width=3)
draw.text((x + 2, 2), str(x // pixel_size), fill="black", font=font)
for y in range(0, grid_height * pixel_size, pixel_size):
draw.line((0, y, grid_width * pixel_size, y), fill="gray", width=1)
draw.text((2, y + 2), str(y // pixel_size), fill="black", font=font)
pixelated_image.save(output_path)
return output_path, grid_width, grid_height, pixel_size, num_colors
def process_image(image, grid_width, grid_height, pixel_size, num_colors):
output_path = "output.png"
full_pixel_art_process_custom_grid(
image_path=image,
output_path=output_path,
grid_width=grid_width,
grid_height=grid_height,
pixel_size=pixel_size,
num_colors=num_colors,
add_grid=True
)
return output_path
demo = gr.Interface(
fn=process_image,
inputs=[
gr.Image(type="filepath", label="Upload Image"),
gr.Slider(8, 100, value=32, step=1, label="Grid Width"),
gr.Slider(8, 100, value=32, step=1, label="Grid Height"),
gr.Slider(8, 64, value=32, step=1, label="Pixel Size"),
gr.Slider(2, 32, value=8, step=1, label="Number of Colors")
],
outputs=gr.Image(type="filepath", label="Pixel Art Output"),
title="🎨 Pixel Art Generator",
description="Upload an image and customize your pixelated grid!"
)
demo.launch(share=True,debug=True)