Spaces:
Sleeping
Sleeping
import gradio as gr | |
from colorthief import ColorThief | |
import numpy as np | |
from io import BytesIO | |
def extract_colors(image, num_colors): | |
img = BytesIO() | |
image.save(img, format='PNG') | |
img.seek(0) | |
color_thief = ColorThief(img) | |
palette = color_thief.get_palette(color_count=num_colors) | |
colors = np.array(palette) | |
return colors | |
def plot_colors(colors): | |
palette = np.zeros((50, len(colors) * 50, 3), dtype=int) | |
step = 50 | |
for idx, color in enumerate(colors): | |
palette[:, idx*step:(idx+1)*step, :] = color | |
return palette | |
def colors_to_hex(colors): | |
hex_colors = ['#%02x%02x%02x' % tuple(color) for color in colors] | |
return hex_colors | |
def process_image(image, num_colors): | |
colors = extract_colors(image, num_colors) | |
palette = plot_colors(colors) | |
palette_str = "palette=" + str(colors.tolist()) | |
hex_colors = colors_to_hex(colors) | |
hex_palette_str = 'palette=' + str(hex_colors) | |
return palette, palette_str, hex_palette_str | |
def main(): | |
iface = gr.Interface(fn=process_image, | |
inputs=[ | |
gr.Image(type="pil", label="上传图片"), | |
gr.Slider(minimum=1, maximum=20, value=5, step=1, label="调色板颜色数量") | |
], | |
outputs=[ | |
gr.Image(type="numpy", label="生成的调色板"), | |
gr.Textbox(label="调色板RGB值"), | |
gr.Textbox(label="调色板16进制值") | |
]) | |
iface.launch() | |
if __name__ == '__main__': | |
main() |