Golf8's picture
複数画像対応に更新
a25efaf verified
Raw
History Blame
2.95 kB
import gradio as gr
from PIL import Image, ImageEnhance, ImageFilter
import io
import zipfile
def batch_upscale(images, scale, enhance):
if not images:
return None, None, "画像をアップロードしてください"
processed_images = []
results_info = []
for i, img in enumerate(images):
# 高品質アップスケール
width, height = img.size
new_width = int(width * scale)
new_height = int(height * scale)
upscaled = img.resize((new_width, new_height), Image.LANCZOS)
# 追加補正
if enhance:
upscaled = upscaled.filter(ImageFilter.UnsharpMask(radius=2, percent=150, threshold=3))
enhancer = ImageEnhance.Contrast(upscaled)
upscaled = enhancer.enhance(1.15)
enhancer = ImageEnhance.Sharpness(upscaled)
upscaled = enhancer.enhance(1.35)
processed_images.append(upscaled)
# サイズ情報
buf = io.BytesIO()
upscaled.save(buf, format="PNG", quality=95)
size_kb = len(buf.getvalue()) / 1024
results_info.append(f"画像{i+1}: {size_kb:.1f} KB")
# ZIPファイル作成
zip_buffer = io.BytesIO()
with zipfile.ZipFile(zip_buffer, "w") as zip_file:
for i, img in enumerate(processed_images):
img_byte = io.BytesIO()
img.save(img_byte, format="PNG", quality=95)
zip_file.writestr(f"upscaled_{i+1}.png", img_byte.getvalue())
return processed_images, zip_buffer.getvalue(), "\n".join(results_info)
with gr.Blocks(title="Kazの高画質化アプリ") as demo:
gr.Markdown("# 🖼️ KazのAI画像高画質化アプリ\n**複数画像一括処理版**")
with gr.Row():
with gr.Column():
input_gallery = gr.Gallery(
label="📸 複数の画像をドラッグ&ドロップ(一括処理)",
height=500,
object_fit="contain"
)
scale = gr.Radio([2, 4, 8], value=4, label="🔍 拡大倍率(8xは時間がかかります)")
enhance = gr.Checkbox(label="シャープ・コントラスト強化", value=True)
btn = gr.Button("🚀 全画像を高画質化", variant="primary", size="large")
with gr.Column():
output_gallery = gr.Gallery(label="✨ 処理結果", height=500)
output_zip = gr.File(label="📦 全画像をZIPでダウンロード")
status = gr.Textbox(label="処理結果", lines=5)
btn.click(
fn=batch_upscale,
inputs=[input_gallery, scale, enhance],
outputs=[output_gallery, output_zip, status]
)
gr.Markdown("### Tips\n・複数画像を同時にアップロードできます\n・8x + 強化ONでかなり高画質になります\n・処理後、ZIPをダウンロードしてください")
demo.launch()