|
import gradio as gr |
|
import numpy as np |
|
from PIL import Image, ImageDraw, ImageFont, ImageColor |
|
import os |
|
import qrcode |
|
from datetime import datetime |
|
import pytz |
|
import paramiko |
|
import io |
|
import re |
|
import random |
|
|
|
def get_kr_time(): |
|
|
|
korea_time_zone = pytz.timezone('Asia/Seoul') |
|
|
|
|
|
current_time_in_korea = datetime.now(korea_time_zone) |
|
|
|
|
|
return current_time_in_korea.strftime("%Y%m%d-%H%M%S") |
|
|
|
|
|
def upload_pil_image_to_sftp(image, remote_image_name): |
|
host = "192.168.219.113" |
|
port = 22 |
|
username = "hj6ch" |
|
password = "mine06^^" |
|
remote_path = f"/home/hj6ch/outputs/{remote_image_name}" |
|
|
|
|
|
img_byte_arr = io.BytesIO() |
|
image.save(img_byte_arr, format='PNG') |
|
img_byte_arr.seek(0) |
|
|
|
try: |
|
|
|
transport = paramiko.Transport((host, port)) |
|
transport.connect(username=username, password=password) |
|
|
|
sftp = paramiko.SFTPClient.from_transport(transport) |
|
|
|
|
|
sftp.putfo(img_byte_arr, remote_path) |
|
print(f"Image uploaded to {remote_path}") |
|
|
|
|
|
sftp.close() |
|
transport.close() |
|
except Exception as e: |
|
print(f"An error occurred: {e}") |
|
|
|
|
|
def create_qr_with_icon(url, icon_path, resolution=(335, 335), border_reduction=2): |
|
|
|
qr = qrcode.QRCode( |
|
version=1, |
|
error_correction=qrcode.constants.ERROR_CORRECT_H, |
|
box_size=10, |
|
border=4 - border_reduction, |
|
) |
|
qr.add_data(url) |
|
qr.make(fit=True) |
|
|
|
|
|
qr_img = qr.make_image(fill_color="black", back_color="white").convert('RGB') |
|
|
|
|
|
|
|
qr_img = qr_img.resize(resolution, Image.Resampling.LANCZOS) |
|
|
|
|
|
icon_img = Image.open(icon_path) |
|
|
|
|
|
icon_size = min(resolution) // 4 |
|
|
|
|
|
icon_img.thumbnail((icon_size, icon_size), Image.Resampling.LANCZOS) |
|
|
|
|
|
icon_pos = ((resolution[0] - icon_img.size[0]) // 2, (resolution[1] - icon_img.size[1]) // 2) |
|
|
|
|
|
qr_img.paste(icon_img, icon_pos, icon_img) |
|
|
|
|
|
|
|
return qr_img |
|
|
|
|
|
def gnames(text, r, g, b, font): |
|
|
|
image_size = (400, 100) |
|
font_size = font |
|
|
|
|
|
image = Image.new('RGBA', image_size, (255, 255, 255, 0)) |
|
draw = ImageDraw.Draw(image) |
|
|
|
|
|
font = ImageFont.truetype("Helvetica_Neue_LT_Std_75_Bold.otf", font_size) |
|
text_color = (r, g, b) |
|
|
|
|
|
text_bbox = draw.textbbox((0, 0), text, font=font) |
|
text_width = text_bbox[2] - text_bbox[0] |
|
text_height = text_bbox[3] - text_bbox[1] |
|
text_x = image_size[0] - text_width |
|
text_y = (image_size[1] - text_height) / 2 |
|
draw.text((text_x, text_y), text, fill=text_color, font=font) |
|
|
|
|
|
rotated_image = image.rotate(270, expand=True) |
|
return rotated_image |
|
|
|
|
|
from PIL import Image, ImageDraw, ImageFont |
|
|
|
|
|
def shop(text, r, g, b, fs, fonts): |
|
|
|
image_size = (400, 100) |
|
font_size = fs |
|
spacing = 43 |
|
|
|
|
|
image = Image.new('RGBA', image_size, (255, 255, 255, 0)) |
|
draw = ImageDraw.Draw(image) |
|
|
|
|
|
font = ImageFont.truetype(fonts, font_size) |
|
text_color = (r, g, b) |
|
|
|
|
|
current_x = 0 |
|
text_y = (image_size[1] - font_size) // 2 |
|
|
|
|
|
for char in text: |
|
draw.text((current_x, text_y), char, fill=text_color, font=font) |
|
current_x += spacing |
|
|
|
|
|
rotated_image = image.rotate(270, expand=True) |
|
|
|
return rotated_image |
|
|
|
|
|
def names(text, r, g, b, fs, fonts, rotate, tes): |
|
|
|
if tes == False: |
|
image_size = (400, 100) |
|
else: |
|
image_size = (800, 136) |
|
font_size = fs |
|
|
|
|
|
image = Image.new('RGBA', image_size, (255, 255, 255, 0)) |
|
draw = ImageDraw.Draw(image) |
|
|
|
|
|
font = ImageFont.truetype(fonts, font_size) |
|
text_color = (r, g, b) |
|
|
|
text_bbox = draw.textbbox((0, 0), text, font=font) |
|
text_width = text_bbox[2] - text_bbox[0] |
|
text_height = text_bbox[3] - text_bbox[1] |
|
|
|
|
|
text_x = 0 |
|
text_y = (image_size[1] - text_height) / 2 |
|
draw.text((text_x, text_y), text, fill=text_color, font=font) |
|
|
|
|
|
if rotate: |
|
rotated_image = image.rotate(270, expand=True) |
|
else: |
|
rotated_image = image.rotate(0, expand=True) |
|
return rotated_image |
|
|
|
|
|
def create_text_image(text, r, g, b): |
|
""" |
|
Create an image with the specified text. |
|
The text uses two different fonts: normal for letters and outline for numbers. |
|
The text color is defined by the RGB values (r, g, b). |
|
|
|
:param text: The text to be drawn. |
|
:param r: Red component of the color, range 0-255. |
|
:param g: Green component of the color, range 0-255. |
|
:param b: Blue component of the color, range 0-255. |
|
:return: An image object with the drawn text. |
|
""" |
|
|
|
|
|
estimated_width = sum( |
|
[ImageFont.ImageFont.getsize(font=normal_font if char.isalpha() else outline_font, text=char)[0] for char in |
|
text]) + 10 * len(text) |
|
|
|
img = Image.new('RGBA', (estimated_width, 100), color=(255, 255, 255, 0)) |
|
d = ImageDraw.Draw(img) |
|
|
|
|
|
current_position = 10 |
|
|
|
|
|
for char in text: |
|
|
|
used_font = outline_font if char.isdigit() else normal_font |
|
|
|
d.text((current_position, 10), char, font=used_font, fill=(r, g, b, 255)) |
|
|
|
width, _ = ImageFont.ImageFont.getsize(font=used_font, text=char) |
|
current_position += width + 5 |
|
|
|
return img |
|
|
|
|
|
def hex_to_rgb(hex_color): |
|
|
|
hex_color = hex_color.lstrip('#') |
|
|
|
|
|
r, g, b = tuple(int(hex_color[i:i + 2], 16) for i in (0, 2, 4)) |
|
return r, g, b |
|
|
|
|
|
def load_image_as_pil(file_path): |
|
"""Load an image from the specified file path and return it as a PIL Image object.""" |
|
try: |
|
with Image.open(file_path) as img: |
|
return img.copy() |
|
except Exception as e: |
|
return str(e) |
|
|
|
|
|
def resize_and_crop_image(image, target_width, target_height): |
|
|
|
img = Image.fromarray(image.astype('uint8'), 'RGB') |
|
|
|
|
|
original_width, original_height = img.size |
|
ratio = min(original_width / target_width, original_height / target_height) |
|
|
|
|
|
new_width = int(target_width * ratio) |
|
new_height = int(target_height * ratio) |
|
|
|
|
|
img = img.crop(((original_width - new_width) // 2, |
|
(original_height - new_height) // 2, |
|
(original_width + new_width) // 2, |
|
(original_height + new_height) // 2)) |
|
|
|
|
|
img = img.resize((target_width, target_height), Image.Resampling.LANCZOS) |
|
|
|
return img |
|
|
|
|
|
def change_color(objekt_color, nn): |
|
file_path = nn |
|
icon = Image.open(file_path).convert("RGBA") |
|
image_np = np.array(icon) |
|
_, _, _, alpha = image_np.T |
|
mask = alpha > 0 |
|
image_np[..., :-1][mask.T] = ImageColor.getcolor(objekt_color, "RGB") |
|
colored_icon = Image.fromarray(image_np) |
|
return colored_icon |
|
|
|
|
|
def no_change_color(): |
|
file_path = 'spe.png' |
|
icon = Image.open(file_path).convert("RGBA") |
|
image_np = np.array(icon) |
|
_, _, _, alpha = image_np.T |
|
mask = alpha > 0 |
|
colored_icon = Image.fromarray(image_np) |
|
return colored_icon |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
namesss = ["SeoYeon", "HyeRin", "JiWoo", "CheaYeon", "YooYeon", "SooMin", "NaKyoung", "YuBin", "DaHyun", "Kotone", |
|
"YeonJi", "Nien", "SoHyun", "Xinyu", "Mayu", "JooBin", "HaYeon", "ShiOn"] |
|
|
|
|
|
|
|
def process_dropdown(dropdown_name): |
|
|
|
if dropdown_name.isdigit(): |
|
number = int(dropdown_name) |
|
if 1 <= number <= 20: |
|
|
|
return namesss[number - 1] |
|
|
|
|
|
return dropdown_name |
|
|
|
|
|
|
|
dropdown_name_example = "5" |
|
name = process_dropdown(dropdown_name_example) |
|
name |
|
ran = 0 |
|
|
|
def generate(img, obj_color, obj_color_picker, obj_color_img, txt_color, txt_color_picker, dropdown_name, txt_name, |
|
radio_txt_group_name, txt_group_name, chk, obj_num, choose_z_a, choose_etc, obj_count, ran): |
|
|
|
global objekt_color |
|
objekt_color = "" |
|
if obj_color == "Atom01": |
|
objekt_color = "#ffdd00" |
|
if obj_color == "Binary01": |
|
objekt_color = "#00ff01" |
|
if obj_color == "Cream01": |
|
objekt_color = "#ff7477" |
|
if obj_color == "Other color": |
|
objekt_color = obj_color_picker |
|
|
|
if obj_color == None: |
|
raise gr.Error("Choose objekt color") |
|
|
|
if txt_color == "Other": |
|
txt_color = txt_color_picker |
|
elif txt_color == "White": |
|
txt_color = "#ffffff" |
|
elif txt_color == "Black": |
|
txt_color = "#000000" |
|
if dropdown_name: |
|
name = process_dropdown(dropdown_name) |
|
else: |
|
name = "" |
|
if radio_txt_group_name == "Other": |
|
group_name = txt_group_name |
|
else: |
|
group_name = radio_txt_group_name |
|
|
|
|
|
resized_image = resize_and_crop_image(img, 1164, 1800) |
|
|
|
if obj_color == "Special": |
|
colored_icon = no_change_color() |
|
resized_image.paste(colored_icon, (0, 0), colored_icon) |
|
else: |
|
if obj_color == "AI image": |
|
|
|
remove_image_path = f'ai_remove.png' |
|
remove_img = Image.open(remove_image_path).convert("RGBA") |
|
remove_np = np.array(remove_img) |
|
|
|
|
|
r_channel = remove_np[:, :, 0] |
|
alpha_channel = remove_np[:, :, 3] |
|
mask = (r_channel == 255) & (alpha_channel > 0) |
|
|
|
grimg = Image.open(f'grad2/gradient_{ran}.png') |
|
|
|
grimg = grimg.convert("RGBA") |
|
grimg_np = np.array(grimg) |
|
|
|
|
|
grimg_np[mask, :] = (0, 0, 0, 0) |
|
|
|
grimg = Image.fromarray(grimg_np) |
|
resized_image.paste(grimg, (1038, 0), grimg) |
|
else: |
|
colored_icon = change_color(objekt_color, 'cobj1.png') |
|
resized_image.paste(colored_icon, (0, 0), colored_icon) |
|
|
|
if txt_color: |
|
r, g, b = hex_to_rgb(txt_color) |
|
|
|
if group_name: |
|
if group_name == "ARTMS": |
|
colored_icon = change_color(txt_color, 'artms.png') |
|
paste_position = (1081, 1371) |
|
resized_image.paste(colored_icon, paste_position, colored_icon) |
|
else: |
|
rotated_image = gnames(str(group_name), r, g, b, 61) |
|
paste_position = (1050, 1240) |
|
resized_image.paste(rotated_image, paste_position, rotated_image) |
|
if not str(name) == "[]": |
|
name_rotated_image = names(str(name), r, g, b, 61, "Helvetica_Neue_LT_Std_75_Bold.otf", True, False) |
|
name_paste_position = (1050, 161) |
|
resized_image.paste(name_rotated_image, name_paste_position, name_rotated_image) |
|
else: |
|
raise gr.Error("Choose text color") |
|
|
|
if obj_num: |
|
if choose_z_a == "Other": |
|
alpa = choose_etc |
|
else: |
|
if choose_z_a == False: |
|
alpa = "" |
|
else: |
|
alpa = choose_z_a |
|
objnum_img = gnames(str(obj_num) + str(alpa), r, g, b, 75) |
|
objnum_paste_position = (1050, 452) |
|
resized_image.paste(objnum_img, objnum_paste_position, objnum_img) |
|
objcount_img = shop("#" + str(obj_count), r, g, b, 75, "MatrixSSK Regular.ttf") |
|
objcount_paste_position = (1046, 871) |
|
resized_image.paste(objcount_img, objcount_paste_position, objcount_img) |
|
if chk: |
|
remove_image_path = 'remove.png' |
|
remove_img = Image.open(remove_image_path).convert("RGBA") |
|
remove_np = np.array(remove_img) |
|
|
|
|
|
r_channel = remove_np[:, :, 0] |
|
alpha_channel = remove_np[:, :, 3] |
|
mask = (r_channel == 255) & (alpha_channel > 0) |
|
|
|
|
|
resized_image = resized_image.convert("RGBA") |
|
resized_np = np.array(resized_image) |
|
|
|
|
|
resized_np[mask, :] = (0, 0, 0, 0) |
|
|
|
resized_image = Image.fromarray(resized_np) |
|
print() |
|
print() |
|
print("Front Render") |
|
print(f"Objekt color is {objekt_color}") |
|
print(f"Name is {name}") |
|
print(f"Objekt number is {obj_num}") |
|
print(f"Group name is {group_name}") |
|
print(f"Round is {chk}") |
|
krtime = get_kr_time() |
|
output_filename = f'{name}_{group_name}_{krtime}_front.png' |
|
print(ran) |
|
return resized_image |
|
|
|
|
|
def assign_url(qr_url): |
|
|
|
url_mapping = { |
|
"tripleS website": "https://triplescosmos.com/", |
|
"tripleS youtube": "https://youtube.com/@triplescosmos", |
|
"tripleS ๐": "https://x.com/triplescosmos", |
|
"tripleS discord": "https://discord.gg/triplescosmos" |
|
} |
|
|
|
|
|
return url_mapping.get(qr_url, qr_url) |
|
|
|
|
|
def generate_back(img, obj_color, obj_color_picker, obj_color_img, txt_color, txt_color_picker, dropdown_name, txt_name, |
|
radio_txt_group_name, txt_group_name, chk, obj_num, choose_z_a, choose_etc, obj_count, radio_class, |
|
txt_class, obj_color_outline, obj_color_outline_picker, radio_season, txt_season, cr, btn_logo, |
|
qr_url, ran): |
|
|
|
|
|
global objekt_color |
|
if obj_color == "Atom01": |
|
objekt_color = "#ffdd00" |
|
if obj_color == "Binary01": |
|
objekt_color = "#00ff01" |
|
if obj_color == "Cream01": |
|
objekt_color = "#ff7477" |
|
if obj_color == "Special": |
|
objekt_color = "Special" |
|
if obj_color == "Other color": |
|
objekt_color = obj_color_picker |
|
if obj_color == None: |
|
raise gr.Error("Choose objekt color") |
|
|
|
if obj_color_outline == "White": |
|
objekt_color_outline = "#ffffff" |
|
if obj_color_outline == "Black": |
|
objekt_color_outline = "#000000" |
|
if obj_color_outline == "Other": |
|
objekt_color_outline = obj_color_outline_picker |
|
|
|
if txt_color == "Other": |
|
txt_color = txt_color_picker |
|
elif txt_color == "White": |
|
txt_color = "#ffffff" |
|
elif txt_color == "Black": |
|
txt_color = "#000000" |
|
if dropdown_name: |
|
name = process_dropdown(dropdown_name) |
|
else: |
|
name = "" |
|
if radio_txt_group_name == "Other": |
|
group_name = txt_group_name |
|
else: |
|
group_name = radio_txt_group_name |
|
if radio_class == "Other": |
|
classes = txt_class |
|
else: |
|
classes = radio_class |
|
|
|
if radio_season == "Other": |
|
season = txt_season |
|
else: |
|
season = radio_season |
|
|
|
resized_image = load_image_as_pil('all.png') |
|
if obj_color == "Special": |
|
resized_image = Image.open('special_back.png') |
|
else: |
|
if obj_color == "AI image": |
|
file_path = f'grad2/gradient_{ran}.png' |
|
|
|
|
|
img = Image.open(file_path) |
|
width, height = img.size |
|
|
|
|
|
left = 125 |
|
top = 0 |
|
right = 1289 |
|
bottom = height |
|
|
|
|
|
cropped_img = img.crop((left, top, right, bottom)) |
|
resized_image = cropped_img |
|
else: |
|
colored_icon = change_color(objekt_color, 'all.png') |
|
resized_image.paste(colored_icon, (0, 0), colored_icon) |
|
|
|
colored_icon = change_color(objekt_color_outline, 'outline.png') |
|
resized_image.paste(colored_icon, (0, 0), colored_icon) |
|
|
|
colored_icon = change_color(txt_color, 'back_ui.png') |
|
resized_image.paste(colored_icon, (0, 0), colored_icon) |
|
|
|
if txt_color: |
|
r, g, b = hex_to_rgb(txt_color) |
|
if group_name: |
|
if group_name == "ARTMS": |
|
colored_icon = change_color(txt_color, 'artms.png') |
|
paste_position = (974, 1371) |
|
resized_image.paste(colored_icon, paste_position, colored_icon) |
|
else: |
|
rotated_image = gnames(str(group_name), r, g, b, 61) |
|
paste_position = (1050, 1240) |
|
resized_image.paste(rotated_image, paste_position, rotated_image) |
|
if not str(name) == "[]": |
|
name_rotated_image = names(str(name), r, g, b, 130, "Helvetica_Neue_LT_Std_65_Medium.otf", False, True) |
|
name_paste_position = (54, 466) |
|
resized_image.paste(name_rotated_image, name_paste_position, name_rotated_image) |
|
|
|
name_rotated_image = names(str(name), r, g, b, 61, "Helvetica_Neue_LT_Std_75_Bold.otf", True, False) |
|
name_paste_position = (932, 159) |
|
resized_image.paste(name_rotated_image, name_paste_position, name_rotated_image) |
|
if not radio_class == None: |
|
name_rotated_image = names(str(classes), r, g, b, 130, "Helvetica_Neue_LT_Std_65_Medium.otf", False, True) |
|
name_paste_position = (54, 700) |
|
resized_image.paste(name_rotated_image, name_paste_position, name_rotated_image) |
|
|
|
if not season == None: |
|
|
|
name_rotated_image = names(str(season), r, g, b, 130, "Helvetica_Neue_LT_Std_65_Medium.otf", False, True) |
|
|
|
name_paste_position = (56, 939) |
|
resized_image.paste(name_rotated_image, name_paste_position, name_rotated_image) |
|
else: |
|
raise gr.Error("Choose text color") |
|
if obj_num: |
|
if choose_z_a == "Other": |
|
alpa = choose_etc |
|
else: |
|
if choose_z_a == False: |
|
alpa = "" |
|
else: |
|
alpa = choose_z_a |
|
objnum_img = gnames(str(obj_num) + str(alpa), r, g, b, 75) |
|
objnum_paste_position = (951, 448) |
|
resized_image.paste(objnum_img, objnum_paste_position, objnum_img) |
|
objcount_img = shop("#" + str(obj_count), r, g, b, 75, "MatrixSSK Regular.ttf") |
|
objcount_paste_position = (943, 867) |
|
resized_image.paste(objcount_img, objcount_paste_position, objcount_img) |
|
if btn_logo: |
|
colored_icon = change_color(txt_color, 'logo.png') |
|
resized_image.paste(colored_icon, (61, 162), colored_icon) |
|
if qr_url: |
|
url_txt = assign_url(qr_url) |
|
colored_icon = create_qr_with_icon(url_txt, 'qr_icon.png') |
|
|
|
if colored_icon.mode != 'RGBA': |
|
colored_icon = colored_icon.convert('RGBA') |
|
|
|
|
|
|
|
resized_image.paste(colored_icon, (555, 1098), colored_icon.split()[3]) |
|
|
|
if cr: |
|
colored_icon = change_color(txt_color, 'cr.png') |
|
resized_image.paste(colored_icon, (0, 0), colored_icon) |
|
if chk: |
|
remove_image_path = 'remove.png' |
|
remove_img = Image.open(remove_image_path).convert("RGBA") |
|
remove_np = np.array(remove_img) |
|
|
|
|
|
r_channel = remove_np[:, :, 0] |
|
alpha_channel = remove_np[:, :, 3] |
|
mask = (r_channel == 255) & (alpha_channel > 0) |
|
|
|
|
|
resized_image = resized_image.convert("RGBA") |
|
resized_np = np.array(resized_image) |
|
|
|
|
|
resized_np[mask, :] = (0, 0, 0, 0) |
|
|
|
resized_image = Image.fromarray(resized_np) |
|
print() |
|
print() |
|
print("back Render") |
|
print(f"Objekt color is {obj_color}") |
|
print(f"Objekt outline color is {objekt_color_outline}") |
|
print(f"Name is {name}") |
|
print(f"CLASS is {classes}") |
|
print(f"SEASON is {season}") |
|
print(f"Objekt number is {obj_num}") |
|
print(f"Group name is {group_name}") |
|
print(f"Round is {chk}") |
|
krtime = get_kr_time() |
|
output_filename = f'{name}_{group_name}_{krtime}_back.png' |
|
print(ran) |
|
return resized_image |
|
|
|
|
|
def change_ran(a): |
|
if a == "AI image": |
|
ran = random.randrange(1, 64) |
|
return ran |
|
else: |
|
return 0 |
|
|
|
def update_obj_color_picker_visibility(obj_color): |
|
if obj_color == "Other color": |
|
return gr.ColorPicker(visible=True), gr.Slider(1, 164, 0, label="AI id", visible=False), gr.Button(visible=False) |
|
elif obj_color == "AI image": |
|
ran = random.randrange(1, 164) |
|
return gr.ColorPicker(visible=False), gr.Slider(1, 164, ran, label="AI id", visible=True), gr.Button(visible=True) |
|
else: |
|
return gr.ColorPicker(visible=False), gr.Slider(1, 164, 0, label="AI id", visible=False), gr.Button(visible=False) |
|
|
|
|
|
def update_obj_color_class_visibility(obj_color2): |
|
if "01" in obj_color2: |
|
return gr.ColorPicker(visible=True) |
|
else: |
|
return gr.ColorPicker(visible=False) |
|
|
|
|
|
|
|
def update_obj_color_img_visibility(obj_color_img): |
|
if obj_color_img == "Other image": |
|
return gr.Image(visible=True) |
|
else: |
|
return gr.Image(visible=False) |
|
|
|
|
|
def update_txt_color_picker_visibility(txt_color_picker): |
|
if txt_color_picker == "Other": |
|
return gr.Image(visible=True) |
|
else: |
|
return gr.Image(visible=False) |
|
|
|
|
|
def update_txt_name_visibility(dropdown_group_name): |
|
if dropdown_group_name == "Other": |
|
return gr.Textbox(visible=True, interactive=True) |
|
else: |
|
return gr.Textbox(visible=False) |
|
|
|
|
|
def update_txt_group_name_visibility(a): |
|
if a == "Other": |
|
return gr.Textbox(visible=True) |
|
else: |
|
return gr.Textbox(visible=False) |
|
|
|
|
|
def update_alpa_visibiliy(a): |
|
if a == "Other": |
|
return gr.Textbox(visible=True) |
|
else: |
|
return gr.Textbox(visible=False) |
|
|
|
|
|
def update_chk_num(a): |
|
if a == True: |
|
return gr.Textbox(visible=True), gr.Radio(visible=True), gr.Textbox(visible=True) |
|
else: |
|
return gr.Textbox(visible=False), gr.Radio(visible=False), gr.Textbox(visible=False) |
|
|
|
|
|
def clear(a): |
|
return gr.Radio(value=None), gr.ColorPicker(value=None), gr.Image(value=None), gr.Radio(value=None), gr.ColorPicker( |
|
value="#ffffff"), gr.Dropdown(value=""), gr.Textbox(value=None), gr.Radio(value=None), gr.Textbox( |
|
value=None), gr.Checkbox(value=True), gr.Textbox(value=None), gr.Radio(value=None), gr.Textbox( |
|
value=None), gr.Textbox(value=None), gr.Checkbox(value=None) |
|
|
|
|
|
def flip_back(a): |
|
return gr.Row(visible=False), gr.Row(visible=True), gr.Button(visible=False), gr.Button(visible=True), gr.Image |
|
|
|
|
|
def flip_front(a): |
|
return gr.Row(visible=True), gr.Row(visible=False), gr.Button(visible=True), gr.Button(visible=False) |
|
|
|
|
|
def txt_class_visibility(a): |
|
if a == "Other": |
|
return gr.Textbox(visible=True) |
|
else: |
|
return gr.Textbox(visible=False) |
|
|
|
|
|
def chk_sync(a): |
|
return gr.Checkbox(value=a) |
|
|
|
|
|
def obj_color_outline_picker_visibility(a): |
|
if a == "Other": |
|
return gr.ColorPicker(visible=True) |
|
else: |
|
return gr.ColorPicker(visible=False) |
|
|
|
|
|
def txt_season_visibility(a): |
|
if a == "Other": |
|
return gr.Textbox(visible=True) |
|
else: |
|
return gr.Textbox(visible=False) |
|
|
|
|
|
def gen_edit_fn(image): |
|
img = Image.fromarray(image.astype('uint8'), 'RGB') |
|
b = resize_and_crop_image(img, 1164, 1800) |
|
return b,b |
|
|
|
with gr.Blocks(theme=gr.themes.Soft()) as demo: |
|
with gr.Row(): |
|
gr.Markdown( |
|
""" |
|
# Custom Objekt |
|
## Input image and Select Options |
|
""") |
|
|
|
|
|
|
|
with gr.Tab("Lions"): |
|
with gr.Row(): |
|
img = gr.Image(label="Image", interactive=True) |
|
|
|
with gr.Column(): |
|
with gr.Group(): |
|
obj_color = gr.Radio(["Atom01", "Binary01", "Cream01", "Special", "Other color", "AI image"], |
|
label="Objekt Color", value="Cream01") |
|
with gr.Row(): |
|
ai_num = gr.Slider(1, 164, 10, label="AI id", visible=False,step=1) |
|
change_ai = gr.Button(value="Change AI", visible=False) |
|
obj_color_picker = gr.ColorPicker(label="Other Objekt Color", visible=False, interactive=True) |
|
obj_color_img = gr.Image(label="Image", visible=False, interactive=True) |
|
|
|
|
|
obj_color.change(update_obj_color_img_visibility, obj_color, obj_color_img) |
|
with gr.Group(): |
|
txt_color = gr.Radio(["White", "Black", "Other"], label="Text Color", value="Black") |
|
txt_color_picker = gr.ColorPicker(label="Other Text Color", value="#ffffff", visible=False, |
|
interactive=True) |
|
txt_color.change(update_txt_color_picker_visibility, txt_color, txt_color_picker) |
|
with gr.Group(): |
|
dropdown_name = gr.Dropdown( |
|
["SeoYeon", "HyeRin", "JiWoo", "ChaeYeon", "YooYeon", "SooMin", "NaKyoung", "YuBin", "Kaede", |
|
"DaHyun", "Kotone", "YeonJi", "Nien", "SoHyun", "Xinyu", "Mayu", "Lynn", "JooBin", "HaYeon", |
|
"ShiOn"], label="Name", allow_custom_value=True) |
|
txt_name = gr.Textbox(label="Name", placeholder="RinHye", visible=False, interactive=True) |
|
dropdown_name.change(update_txt_name_visibility, dropdown_name, txt_name) |
|
radio_txt_group_name = gr.Radio(["tripleS", "ARTMS", "Other"], label="Group name") |
|
txt_group_name = gr.Textbox(label="Other Group name", placeholder="CLASSY", visible=False, |
|
interactive=True) |
|
radio_txt_group_name.change(update_txt_group_name_visibility, radio_txt_group_name, txt_group_name) |
|
with gr.Group(): |
|
with gr.Row(): |
|
obj_num = gr.Textbox(label="Objekt number", placeholder="100", interactive=True, visible=False) |
|
choose_z_a = gr.Radio(["Z", "A", "Other"], label="Z or A", interactive=True, visible=False) |
|
choose_etc = gr.Textbox(label="Alphabet", placeholder="S", interactive=True, visible=False) |
|
obj_count = gr.Textbox(label="Objekt Serial", placeholder="00001", interactive=True, visible=False) |
|
choose_z_a.change(update_alpa_visibiliy, choose_z_a, choose_etc) |
|
chk_num = gr.Checkbox(label="Add Objekt numbers") |
|
chk_num.change(update_chk_num, chk_num, [obj_num, choose_z_a, obj_count]) |
|
|
|
with gr.Group(): |
|
chk = gr.Checkbox(label="Rounded", value=True, interactive=True) |
|
with gr.Group(): |
|
btn = gr.Button(value="Generate") |
|
|
|
with gr.Column(): |
|
outputs = gr.Image(label="Edited Image", scale=10) |
|
btn_clear = gr.ClearButton(value="Clear") |
|
with gr.Tab("Lion") as back_tab: |
|
with gr.Row(): |
|
preview = gr.Image(label="Image") |
|
with gr.Column(): |
|
with gr.Group(): |
|
obj_color = gr.Radio(["Atom01", "Binary01", "Cream01", "Special", "Other color", "AI image"], |
|
label="Objekt Color", value="Cream01") |
|
obj_color_outline = gr.Radio(["White", "Black", "Other"], label="Out line", value="White") |
|
obj_color_outline_picker = gr.ColorPicker(label="Other Outline Color", value="#ffffff", visible=False, |
|
interactive=True) |
|
with gr.Group(): |
|
btn_logo = gr.Checkbox(label="Add Logo", interactive=True) |
|
with gr.Group(): |
|
radio_class = gr.Radio(["Zero", "First", "Double", "Special", "Other"], label="CLASS", visible=True) |
|
txt_class = gr.Textbox(label="Other class", placeholder="Third", visible=False) |
|
with gr.Group(): |
|
radio_season = gr.Radio(["Atom01", "Binary01", "Cream01", "Other"], label="SEASON") |
|
txt_season = gr.Textbox(label="Other SEASON", interactive=True, visible=False) |
|
with gr.Group(): |
|
qr_url = gr.Dropdown(["tripleS website", "tripleS youtube", "tripleS ๐", "tripleS discord"], |
|
label="qr url", info="Can write any url", allow_custom_value=True) |
|
with gr.Row(): |
|
qr_option1 = gr.Checkbox(label="tripleS logo", value=False, interactive=True) |
|
qr_option2 = gr.Checkbox(label="ARTMS (Cosmo) logo", value=False, interactive=True) |
|
with gr.Group(): |
|
cr = gr.Checkbox(label="Add Rights", value=False, interactive=True) |
|
with gr.Group(): |
|
chk2 = gr.Checkbox(label="Rounded", value=True, interactive=True) |
|
with gr.Group(): |
|
btn_back = gr.Button(value="Generate") |
|
|
|
with gr.Column(): |
|
outputs2 = gr.Image(label="Edited Image", scale=10) |
|
btn_clear2 = gr.ClearButton(value="Clear") |
|
with gr.Tab("image Editor"): |
|
with gr.Row(): |
|
edit_img = gr.Image(interactive=True) |
|
with gr.Column(): |
|
rotate_img = gr.Radio(["90", "270", "None"], value="None", label="Rotate image") |
|
gen_edit = gr.Button(value="Generate", interactive=True) |
|
output_edit = gr.Image(interactive=False) |
|
|
|
|
|
gen_edit.click(gen_edit_fn, rotate_img, [output_edit, img]) |
|
obj_color.change(update_obj_color_picker_visibility, obj_color, [obj_color_picker, ai_num, change_ai]) |
|
radio_season.change(txt_season_visibility, radio_season, txt_season) |
|
obj_color_outline.change(obj_color_outline_picker_visibility, obj_color_outline, obj_color_outline_picker) |
|
chk.change(chk_sync, chk, chk2) |
|
chk2.change(chk_sync, chk2, chk) |
|
btn_clear.click(clear, btn_clear, |
|
[obj_color, obj_color_picker, obj_color_img, txt_color, txt_color_picker, dropdown_name, txt_name, |
|
radio_txt_group_name, txt_group_name, chk, obj_num, choose_z_a, choose_etc, obj_count, chk_num]) |
|
btn_clear2.click(clear, btn_clear2, |
|
[obj_color, obj_color_picker, obj_color_img, txt_color, txt_color_picker, dropdown_name, txt_name, |
|
radio_txt_group_name, txt_group_name, chk, obj_num, choose_z_a, choose_etc, obj_count, chk_num]) |
|
change_ai.click(change_ran, obj_color, ai_num) |
|
btn.click(generate, [img, obj_color, obj_color_picker, obj_color_img, txt_color, txt_color_picker, dropdown_name, txt_name, radio_txt_group_name, txt_group_name, chk, obj_num, choose_z_a, choose_etc, obj_count, ai_num], outputs) |
|
btn_back.click(generate_back, [img, obj_color, obj_color_picker, obj_color_img, txt_color, txt_color_picker, dropdown_name, txt_name, radio_txt_group_name, txt_group_name, chk, obj_num, choose_z_a, choose_etc, obj_count, radio_class, txt_class, obj_color_outline, obj_color_outline_picker, radio_season, txt_season, cr, btn_logo, qr_url, ai_num], outputs2) |
|
back_tab.select(generate_back, [img, obj_color, obj_color_picker, obj_color_img, txt_color, txt_color_picker, dropdown_name, txt_name, radio_txt_group_name, txt_group_name, chk, obj_num, choose_z_a, choose_etc, obj_count, radio_class, txt_class, obj_color_outline, obj_color_outline_picker, radio_season, txt_season, cr, btn_logo, qr_url, ai_num], preview) |
|
radio_class.change(txt_class_visibility, radio_class, txt_class) |
|
|
|
if __name__ == "__main__": |
|
demo.launch() |
|
|
|
|