import gradio as gr import os import datetime from zoneinfo import ZoneInfo import cv2 from PIL import Image, ImageDraw, ImageFilter, ImageColor def combin_image(input_images, back_color, margin_top, margin_between, margin_side): dt = datetime.datetime.now(ZoneInfo("Asia/Tokyo")) # フォルダ・ファイル名設定 work_fol = dt.strftime("%Y%m%d%H%M%S") combin_file = dt.strftime("%Y%m%d%H%M") + ".jpg" # フォルダ作成 os.makedirs(work_fol, exist_ok=True) back_color_rgb = tuple(back_color) for i, img in enumerate(input_images): # 対象画像読み込み load_img = Image.open(img) img_width, img_height = load_img.size if i == 0: # 上下マージン用画像生成 img_margin = Image.new("RGB", (img_width + margin_side * 2, int(margin_between/2) + margin_top), back_color_rgb) img_margin.save(work_fol + "/" + "img_margin.jpg") # 画像を生成して貼付 img_add_edge = Image.new("RGB", (img_width + margin_side * 2, img_height + margin_between), back_color_rgb) img_add_edge.paste(load_img, (margin_side, int(margin_between/2))) file_name = os.path.basename(img) print(file_name) img_add_edge.save(work_fol + "/" + file_name) im_margin = cv2.imread(work_fol + "/" + "img_margin.jpg") im_v = im_margin for i, img in enumerate(input_images): im = cv2.imread(work_fol + "/" + os.path.basename(img)) im_v = cv2.vconcat([im_v, im]) im_v = cv2.vconcat([im_v, im_margin]) cv2.imwrite(work_fol + "/" + combin_file, im_v) return work_fol + "/" + combin_file def get_rgb(color): if color[0:4] != "rgba": if color[0] != "#": color = "#" + color color_rgb = ImageColor.getrgb(color) else: r = round(float(color.split(",")[0].split("(")[1])) g = round(float(color.split(",")[1])) b = round(float(color.split(",")[2])) color_rgb = (r, g, b) return color_rgb with gr.Blocks(title="Fliptoon Image Generator", theme=gr.themes.Citrus()) as demo: title = "