Spaces:
Running
Running
File size: 4,113 Bytes
b37a7a8 63d332a b37a7a8 63d332a b37a7a8 63d332a b37a7a8 63d332a b37a7a8 13ccdc7 63d332a b37a7a8 13ccdc7 32fba57 13ccdc7 63d332a b37a7a8 32fba57 63d332a b37a7a8 63d332a 13ccdc7 63d332a 13ccdc7 63d332a b37a7a8 4b7a504 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
import gradio as gr
from pathlib import Path
from PIL import Image
def get_supported_formats():
supported_formats = Image.registered_extensions()
return supported_formats
SUPPORTED_FORMATS = get_supported_formats()
def convert_format(input_image: str = None, ext=".webp", quality=80):
file_path = Path("caches") / "{}{}".format(Path(input_image).stem, ext)
file_path.parent.mkdir(parents=True, exist_ok=True)
img = Image.open(input_image)
# img = img.convert("RGBA")
format = None
if ext in SUPPORTED_FORMATS:
format = SUPPORTED_FORMATS[ext]
if format is None:
gr.Error(
f"Unsupported image format. Supported formats: {', '.join(SUPPORTED_FORMATS)}"
)
img.save(file_path, format, quality=quality)
# reopen and check
img_reopen = Image.open(file_path)
img_reopen = img_reopen.convert("RGBA")
return img_reopen, str(file_path)
def process(input_list, ext=".webp", quality=80):
out_files = []
out_images = []
for path in input_list:
img_reopen, file_path = convert_format(path[0], ext, quality)
out_files.append(file_path)
out_images.append(img_reopen)
return out_files, out_images
def swap_to_gallery(images):
return (
gr.update(value=images, visible=True),
gr.update(visible=True),
gr.update(visible=False),
)
def download_files(files):
for file in files:
breakpoint()
gr.DownloadButton(visible=True, value=file)
def run(server_name="127.0.0.1", server_port=7860):
with gr.Blocks() as app:
gr.Markdown(
"""
# WebP Converter
Upload one or more image files and convert it to WebP format with adjustable quality.
![]('F:/gradio-apps/image_to_webp/caches/1.webp')
"""
)
with gr.Row(equal_height=False):
with gr.Column():
files = gr.Files(
label="Drag 1 or more images",
file_types=["image"],
)
uploaded_files = gr.Gallery(
label="Your images", visible=False, columns=4, height=250
)
with gr.Row():
quality_slider = gr.Slider(
minimum=1,
maximum=100,
value=80,
step=1,
label="Image Quality",
)
extension_dropdown = gr.Dropdown(
label="Output Format",
choices=[
".webp",
".png",
".jpg",
".jpeg",
".gif",
".bmp",
".tiff",
".tif",
],
value=".webp",
)
proc_btn = gr.Button("Run Convert", variant="primary")
with gr.Column():
output_file = gr.File(label="Converted WebP")
output_gallery = gr.Gallery(
label="Re-check converted images",
show_label=False,
elem_id="gallery",
object_fit="contain",
height="auto",
columns=4,
)
# collect inputs and outputs
inputs = [
uploaded_files,
extension_dropdown,
quality_slider,
]
outputs = [
output_file,
output_gallery,
]
# actions
files.upload(
fn=swap_to_gallery,
inputs=files,
outputs=[uploaded_files, proc_btn, files],
)
proc_btn.click(process, inputs=inputs, outputs=outputs)
app.queue().launch(
server_name=server_name, server_port=server_port, share=False
)
if __name__ == "__main__":
run(server_name="0.0.0.0", server_port=7860)
|