Spaces:
Runtime error
Runtime error
import io | |
import numpy as np | |
from PIL import Image | |
import streamlit as st | |
uploaded_file = st.file_uploader("Choose an image", type=['png', 'jpg', 'jpeg']) | |
pixelsize = st.selectbox( | |
'Pixel grid size', | |
(256, 128, 64, 32), format_func=lambda x: f'{x}px') | |
colors = st.selectbox("Number of colors", (256, 128, 64, 32, 16, 8)) | |
if uploaded_file: | |
submit_button = st.button(label='Generate pixel art!') | |
if uploaded_file and submit_button: | |
img_raw = Image.open(uploaded_file) | |
hsv_image = img_raw.convert("HSV") | |
hue, saturation, value = hsv_image.split() | |
threshold = 180 | |
saturation = saturation.point(lambda x: 255 if x > threshold else x) | |
hsv_image = Image.merge("HSV", (hue, saturation, value)) | |
img = hsv_image.convert("RGB") | |
size = img.size | |
new_size = (size[0] * pixelsize // max(size), size[1] * pixelsize // max(size)) | |
img = img.convert("RGB").convert("P", palette=Image.ADAPTIVE, colors=colors) | |
img = img.resize(new_size, resample=Image.NEAREST).quantize(colors=256, dither=Image.Dither.FLOYDSTEINBERG) | |
img = img.resize(size, resample=Image.NEAREST) | |
col1, col2 = st.columns(2) | |
col1.image(img_raw) | |
col2.image(img, channels='RGB') | |
output = io.BytesIO() | |
img.convert("RGB").save(output, format='JPEG') | |
btn = st.download_button( | |
label="Download image", | |
data=output, | |
file_name="pixel_art.png", | |
mime="image/png" | |
) | |