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()