Spaces:
Running on Zero
Running on Zero
| import gradio as gr | |
| from PIL import Image, ImageEnhance, ImageFilter | |
| def advanced_upscale(image, scale, enhance): | |
| if image is None: | |
| return None, "画像をアップロードしてください" | |
| # 元のサイズ | |
| width, height = image.size | |
| new_width = int(width * scale) | |
| new_height = int(height * scale) | |
| # 高品質アップスケール | |
| upscaled = image.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.1) | |
| enhancer = ImageEnhance.Sharpness(upscaled) | |
| upscaled = enhancer.enhance(1.3) | |
| # ファイルサイズ目安表示 | |
| import io | |
| buf = io.BytesIO() | |
| upscaled.save(buf, format="PNG", quality=95) | |
| size_mb = len(buf.getvalue()) / (1024 * 1024) | |
| return upscaled, f"✅ {scale}x 完了! 予想サイズ: {size_mb:.2f} MB" | |
| with gr.Blocks(title="Kazの高画質化アプリ") as demo: | |
| gr.Markdown("# 🖼️ KazのAI画像高画質化アプリ\n**改善版** - より綺麗に") | |
| with gr.Row(): | |
| with gr.Column(): | |
| input_img = gr.Image(label="画像をアップロード", type="pil", height=500) | |
| scale = gr.Radio([2, 4, 8], value=4, label="拡大倍率(8xでかなり重くなります)") | |
| enhance = gr.Checkbox(label="さらにシャープ・コントラスト強化", value=True) | |
| btn = gr.Button("🚀 高画質化開始", variant="primary") | |
| with gr.Column(): | |
| output_img = gr.Image(label="処理結果", height=500) | |
| status = gr.Textbox(label="結果") | |
| btn.click(advanced_upscale, inputs=[input_img, scale, enhance], outputs=[output_img, status]) | |
| gr.Markdown("### Tips\n・4xか8xで試してみてください\n・ズームして比較すると違いが分かりやすいです") | |
| demo.launch() |