objektify / app.old
chohj06ms's picture
Rename app.py to app.old
cf049a0
raw
history blame contribute delete
No virus
34.3 kB
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:
# SFTP ์„ธ์…˜ ์‹œ์ž‘
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):
# Generate QR code with a smaller border
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_H,
box_size=10,
border=4 - border_reduction, # Reduce the border by the border_reduction amount
)
qr.add_data(url)
qr.make(fit=True)
# Create an image from the QR Code instance
qr_img = qr.make_image(fill_color="black", back_color="white").convert('RGB')
# Resize QR code to the specified resolution
# Instead of using Image.ANTIALIAS, you should now use Image.Resampling.LANCZOS
qr_img = qr_img.resize(resolution, Image.Resampling.LANCZOS)
# Open the icon file
icon_img = Image.open(icon_path)
# Calculate the maximum size of the icon
icon_size = min(resolution) // 4
# Resize the icon, if it's too large
icon_img.thumbnail((icon_size, icon_size), Image.Resampling.LANCZOS)
# Calculate position for icon (center)
icon_pos = ((resolution[0] - icon_img.size[0]) // 2, (resolution[1] - icon_img.size[1]) // 2)
# Paste the icon image onto the QR code
qr_img.paste(icon_img, icon_pos, icon_img)
# Save the QR code with icon
return qr_img
def gnames(text, r, g, b, font):
# ์ด๋ฏธ์ง€ ํฌ๊ธฐ์™€ ๊ธ€๊ผด ํฌ๊ธฐ ์„ค์ •
image_size = (400, 100) # ๋„ˆ๋น„ x ๋†’์ด
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) # ๋„ˆ๋น„ x ๋†’์ด
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) # ๋„ˆ๋น„ x ๋†’์ด
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.
"""
# Estimate the width of the image based on the text length
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)
# Create an image with a transparent background
img = Image.new('RGBA', (estimated_width, 100), color=(255, 255, 255, 0))
d = ImageDraw.Draw(img)
# Current position for drawing text
current_position = 10
# Draw the text with the specified color
for char in text:
# Select the appropriate font
used_font = outline_font if char.isdigit() else normal_font
# Draw the character
d.text((current_position, 10), char, font=used_font, fill=(r, g, b, 255))
# Calculate width of the character and update position
width, _ = ImageFont.ImageFont.getsize(font=used_font, text=char)
current_position += width + 5 # Added a small space between characters
return img
def hex_to_rgb(hex_color):
# Remove the '#' character if it exists
hex_color = hex_color.lstrip('#')
# Convert the hex string to integers
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):
# ์ด๋ฏธ์ง€๋ฅผ PIL Image ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜
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 # Adjust the path according to your setup
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' # Adjust the path according to your setup
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
# Given: dropdown_name contains either a string number between 1-20 or just a string.
# Task: If dropdown_name is a number between 1-20, map it to a corresponding name from a predefined list.
# If it's just a string, assign it directly to the variable name.
# The list of names
namesss = ["SeoYeon", "HyeRin", "JiWoo", "CheaYeon", "YooYeon", "SooMin", "NaKyoung", "YuBin", "DaHyun", "Kotone",
"YeonJi", "Nien", "SoHyun", "Xinyu", "Mayu", "JooBin", "HaYeon", "ShiOn"]
# Function to process the dropdown_name
def process_dropdown(dropdown_name):
# Check if dropdown_name is a digit and within the range 1-20
if dropdown_name.isdigit():
number = int(dropdown_name)
if 1 <= number <= 20:
# Map the number to a name in the list (subtract 1 for zero-based indexing)
return namesss[number - 1]
# If not a number in 1-20, return the string as it is
return dropdown_name
# Example usage
dropdown_name_example = "5" # Change this to test with different values
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):
# Load and color 'cobj1.png'
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
# Resize and crop the input image
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' # Adjust the path according to your setup
remove_img = Image.open(remove_image_path).convert("RGBA")
remove_np = np.array(remove_img)
# remove.png์—์„œ r ์ฑ„๋„์ด 255์ด๊ณ  ์•ŒํŒŒ ์ฑ„๋„์ด ์žˆ๋Š” ํ”ฝ์…€ ์œ„์น˜ ์ฐพ๊ธฐ
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')
# resized_image๋ฅผ RGBA ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ (ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ)
grimg = grimg.convert("RGBA")
grimg_np = np.array(grimg)
# ํ•ด๋‹น ์œ„์น˜์˜ resized_image ํ”ฝ์…€์„ ํˆฌ๋ช…ํ•˜๊ฒŒ ์„ค์ •
grimg_np[mask, :] = (0, 0, 0, 0) # RGBA ํ˜•์‹์— ๋งž๊ฒŒ ์กฐ์ •
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)
# Overlay the colored icon on the resized image
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' # Adjust the path according to your setup
remove_img = Image.open(remove_image_path).convert("RGBA")
remove_np = np.array(remove_img)
# remove.png์—์„œ r ์ฑ„๋„์ด 255์ด๊ณ  ์•ŒํŒŒ ์ฑ„๋„์ด ์žˆ๋Š” ํ”ฝ์…€ ์œ„์น˜ ์ฐพ๊ธฐ
r_channel = remove_np[:, :, 0]
alpha_channel = remove_np[:, :, 3]
mask = (r_channel == 255) & (alpha_channel > 0)
# resized_image๋ฅผ RGBA ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ (ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ)
resized_image = resized_image.convert("RGBA")
resized_np = np.array(resized_image)
# ํ•ด๋‹น ์œ„์น˜์˜ resized_image ํ”ฝ์…€์„ ํˆฌ๋ช…ํ•˜๊ฒŒ ์„ค์ •
resized_np[mask, :] = (0, 0, 0, 0) # RGBA ํ˜•์‹์— ๋งž๊ฒŒ ์กฐ์ •
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 ๋งคํ•‘
url_mapping = {
"tripleS website": "https://triplescosmos.com/",
"tripleS youtube": "https://youtube.com/@triplescosmos",
"tripleS ๐•": "https://x.com/triplescosmos",
"tripleS discord": "https://discord.gg/triplescosmos"
}
# qr_url์ด ๋งคํ•‘๋œ ๋ฌธ์ž์—ด ์ค‘ ํ•˜๋‚˜๋ผ๋ฉด ํ•ด๋‹น URL์„, ์•„๋‹ˆ๋ผ๋ฉด qr_url ๊ทธ๋Œ€๋กœ๋ฅผ ๋ฐ˜ํ™˜
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):
# Load and color 'cobj1.png'
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
# Resize and crop the input image
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
# ์ž˜๋ผ๋‚ผ ๋ถ€๋ถ„ ์„ค์ • (x < 126์— ํ•ด๋‹นํ•˜๋Š” ๋ถ€๋ถ„)
left = 125
top = 0
right = 1289 # x๊ฐ€ 126๋ณด๋‹ค ์ž‘์€ ๋ถ€๋ถ„๊นŒ์ง€
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)
# Overlay the colored icon on the resized image
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 = (943, 1238)
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 = seas(str(season), r, g, b, 130, ["Helvetica_Neue_LT_Std_65_Medium.otf", "Helvetica_Neue_LT_Std_75_Bold_Outline.otf"], False, True)
name_rotated_image = names(str(season), r, g, b, 130, "Helvetica_Neue_LT_Std_65_Medium.otf", False, True)
# name_rotated_image = create_text_image(str(season), r,g,b)
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')
# Ensure 'colored_icon' is in RGBA mode so that it has an alpha channel for transparency.
if colored_icon.mode != 'RGBA':
colored_icon = colored_icon.convert('RGBA')
# When pasting, the third argument is the mask, which should be just the alpha channel of 'colored_icon'.
# This assumes that 'colored_icon' is the image you want to paste, and its alpha channel is the mask.
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' # Adjust the path according to your setup
remove_img = Image.open(remove_image_path).convert("RGBA")
remove_np = np.array(remove_img)
# remove.png์—์„œ r ์ฑ„๋„์ด 255์ด๊ณ  ์•ŒํŒŒ ์ฑ„๋„์ด ์žˆ๋Š” ํ”ฝ์…€ ์œ„์น˜ ์ฐพ๊ธฐ
r_channel = remove_np[:, :, 0]
alpha_channel = remove_np[:, :, 3]
mask = (r_channel == 255) & (alpha_channel > 0)
# resized_image๋ฅผ RGBA ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ (ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ)
resized_image = resized_image.convert("RGBA")
resized_np = np.array(resized_image)
# ํ•ด๋‹น ์œ„์น˜์˜ resized_image ํ”ฝ์…€์„ ํˆฌ๋ช…ํ•˜๊ฒŒ ์„ค์ •
resized_np[mask, :] = (0, 0, 0, 0) # RGBA ํ˜•์‹์— ๋งž๊ฒŒ ์กฐ์ •
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, 64, 0, label="AI id", visible=False), gr.Button(visible=False)
elif obj_color == "AI image":
ran = random.randrange(1, 64)
return gr.ColorPicker(visible=False), gr.Slider(1, 64, ran, label="AI id", visible=True), gr.Button(visible=True)
else:
return gr.ColorPicker(visible=False), gr.Slider(1, 64, 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)
# The rest of your code remains the same
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)
with gr.Blocks(theme=gr.themes.Soft()) as demo:
with gr.Row():
gr.Markdown(
"""
# Custom Objekt
## Input image and Select Options
""")
f_btn_back = gr.Button(value="Flip", scale=1, visible=True)
f_btn_front = gr.Button(value="Flip", scale=1, visible=False)
with gr.Row(visible=True) as al1:
img = 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")
with gr.Row():
ai_num = gr.Slider(1, 64, 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.Row(visible=False) as al2:
preview = gr.Image(label="Image")
with gr.Column():
with gr.Group():
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")
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)
radio_class.change(txt_class_visibility, radio_class, txt_class)
f_btn_back.click(flip_back, f_btn_back, [al1, al2, f_btn_back, f_btn_front])
f_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], preview)
f_btn_front.click(flip_front, f_btn_back, [al1, al2, f_btn_back, f_btn_front])
if __name__ == "__main__":
demo.launch()