admin
fix ordnum issue
9bd4611
import re
import math
import itertools
import pandas as pd
import gradio as gr
from link import UrlProcessor
# from main import TextProcessor
description = f'''
You must set the BITLY_ACCESS_TOKEN environment variable.
For more information, see
- https://app.bitly.com/settings/api
'''
def calculate_layout(item_size=(40, 40), pos=(280, 20), pos_p=(30, 67)):
layout = []
pos_x, pos_y = pos
pos_px, pos_py = pos_p
size_x, size_y = item_size
size_px, size_py = item_size
return layout, pos_x, pos_y, pos_px, pos_py, size_x, size_y, size_px, size_py
def update_df(*items):
items = [item for item in items if item is not None]
if len(items) >= 2 and all(items):
image_count = len(items[0]) * len(items[1])
else:
image_count = 1
if image_count:
layout, pos_x, pos_y, pos_px, pos_py, size_x, size_y, size_px, size_py = calculate_layout()
positions = [(pos_x, pos_y, pos_px, pos_py, size_x, size_y, size_px, size_py) for _ in range(image_count)]
df = pd.DataFrame(positions, columns=headers)
df.insert(0, 'ImageId', range(1, image_count + 1))
return df
with gr.Blocks() as demo:
gr.Markdown(description)
with gr.Row():
with gr.Column():
access_token = gr.Textbox(label="Access Token", placeholder="***")
api_url = gr.Textbox(label="API base URL", placeholder="https://")
txt_input = gr.MultimodalTextbox(label="Enter Text with URLs")
count_url = gr.Dropdown(visible=False, allow_custom_value=True)
@gr.render(inputs=[txt_input])
def update_cnt(txt):
text = ''
if txt['files']:
for f in txt['files']:
with open(f) as f:
text += f.read() + '\n\n'
if txt['text']:
text += txt['text']
urls = re.findall(r'http[s]?://\S+', text)
return urls
with gr.Row():
shorten_checkbox = gr.Checkbox(label="Shorten URL", value=False)
qr_checkbox = gr.Checkbox(label="Generate QR Code", value=True)
with gr.Row():
sx = gr.Number(label="Card Width", minimum=1, maximum=210, value=91, step=1)
sy = gr.Number(label="Card Height", minimum=1, maximum=297, value=55, step=1)
scale = gr.Number(label="Scale", minimum=1, maximum=10, value=2, step=0.1)
with gr.Row():
clear_button = gr.ClearButton(txt_input)
submit_button = gr.Button("Process URLs", variant='primary')
with gr.Accordion(open=False, label="Insert"):
with gr.Row():
img_formats = ['png',
'jpeg', 'jpg', 'webp', 'svg', 'gif', 'tiff']
cm_img_input = gr.Files(file_types=img_formats, label='Insert common images')
idv_img_input = gr.Files(file_types=img_formats, label='Insert individual images')
headers = ['PosX', 'PosY', 'PosPx', 'PosPy', 'SizeX', 'SizeY', 'SizePx', 'SizePy']
with gr.Column():
file_output = gr.File(label="Download ZIP")
with gr.Accordion(open=True, label="Gallery"):
gallery_output = gr.Gallery(object_fit='contain', label="PNG Gallery")
with gr.Accordion(open=False, label="Summary"):
json_output = gr.JSON(label="JSON Summary")
with gr.Accordion(open=False, label="Preview"):
preview_output = gr.TextArea(label="Raw Text")
with gr.Row():
inputs = [
txt_input, cm_img_input, idv_img_input
]
examples = [
[{'files': ['demo/demo.md'], 'text': 'https://example.com'},
['demo/white.png'],
['demo/logo.png']
],
[{'files': ['demo/demo.md', 'demo/demo2.md']},
['demo/dark.png'],
['demo/img/number-1.png', 'demo/img/number-2.png', 'demo/img/number-3.png', 'demo/img/number-4.png', 'demo/img/number-5.png', ]
]
]
gr.Examples(examples, inputs)
with gr.Row():
df = gr.Dataframe(headers=['ImageId'] + headers, label="Positions")
count_items = [count_url, idv_img_input]
txt_input.change(update_cnt, txt_input, count_url)
count_url.change(update_df, count_items, df)
cm_img_input.change(update_df, count_items, df)
idv_img_input.change(update_df, count_items, df)
submit_button.click(
UrlProcessor.shorten_and_generate_qr,
inputs=[
access_token,
api_url,
txt_input,
shorten_checkbox,
qr_checkbox,
cm_img_input,
idv_img_input,
sx,
sy,
scale,
df
],
outputs=[preview_output, gallery_output, file_output, json_output]
)
demo.launch()