Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import time | |
| import numpy as np | |
| from PIL import Image | |
| import os | |
| def save_image(im, filename="saved_image.png"): | |
| """画像をファイルに保存する関数""" | |
| if im is not None and "composite" in im: | |
| # 合成画像(最終結果)を取得 | |
| composite = im["composite"] | |
| # numpy配列の場合はPIL Imageに変換 | |
| if isinstance(composite, np.ndarray): | |
| composite = Image.fromarray(composite) | |
| # 画像を保存 | |
| composite.save(filename) | |
| return f"画像が正常に {filename} として保存されました" | |
| else: | |
| return "保存する画像がないか、無効な画像形式です" | |
| # Gradio Blocksアプリケーションを作成(テーマをOceanに設定) | |
| with gr.Blocks(theme=gr.themes.Ocean()) as demo: | |
| gr.Markdown("# Image Editor Demo") | |
| with gr.Row(): | |
| with gr.Column(): | |
| # 1:1の縦横比でImageEditorコンポーネントを作成 | |
| im = gr.ImageEditor( | |
| type="numpy", # 画像はnumpy配列として処理される | |
| crop_size="1:1", # 正方形のトリミング比率を設定 | |
| label="画像エディタ" | |
| ) | |
| with gr.Column(): | |
| # プレビュー表示用のImageコンポーネントを作成 | |
| im_preview = gr.Image(label="プレビュー") | |
| # 各種イベントを追跡するカウンター | |
| with gr.Row(): | |
| n_upload = gr.Number(0, label="アップロードイベント数", step=1) | |
| n_change = gr.Number(0, label="変更イベント数", step=1) | |
| n_input = gr.Number(0, label="入力イベント数", step=1) | |
| # ファイル名入力と保存ボタンを追加 | |
| with gr.Row(): | |
| filename_input = gr.Textbox(value="my_drawing.png", label="ファイル名") | |
| save_btn = gr.Button("画像を保存", variant="primary") | |
| # 保存操作のステータスメッセージ | |
| save_status = gr.Textbox(label="保存ステータス", interactive=False) | |
| # イベントハンドラーを定義: | |
| # 画像がアップロードされたらアップロードカウンターを増加 | |
| im.upload(lambda x: x + 1, outputs=n_upload, inputs=n_upload) | |
| # 画像が変更されたら変更カウンターを増加(ユーザー入力または関数更新による) | |
| im.change(lambda x: x + 1, outputs=n_change, inputs=n_change) | |
| # ユーザーが画像を変更したら入力カウンターを増加 | |
| im.input(lambda x: x + 1, outputs=n_input, inputs=n_input) | |
| # 画像が変更されたらプレビューエリアに合成画像を表示 | |
| im.change(lambda im: im["composite"] if im and "composite" in im else None, | |
| outputs=im_preview, | |
| inputs=im, | |
| show_progress="hidden") | |
| # 保存ボタンクリックイベントを設定 | |
| save_btn.click( | |
| fn=save_image, | |
| inputs=[im, filename_input], | |
| outputs=save_status | |
| ) | |
| # このスクリプトが直接実行されたときにデモを起動 | |
| if __name__ == "__main__": | |
| demo.launch() |