Gradio 迈向每月百万用户的旅程!

阅读更多
Gradio logo
  1. 组件
  2. ImageEditor

初次使用 Gradio?从这里开始: 入门指南

查看发布历史

ImageEditor

gradio.ImageEditor(···)
import gradio as gr with gr.Blocks() as demo: gr.ImageEditor() demo.launch()

描述

创建一个图像组件,作为输入,可以用于上传和编辑图像,使用简单的编辑工具,如画笔、笔触、裁剪和图层。或者,作为输出,此组件可以用于显示图像。

行为

作为输入组件: 将上传的图像作为 EditorValue 的实例传递,EditorValue 只是一个 dict,包含键:'background'、'layers' 和 'composite'。 'background' 和 'composite' 对应的值是图像,而 'layers' 是一个 list 的图像。图像类型为 PIL.Imagenp.arraystr 文件路径,具体取决于 type 参数。

你的函数应该接受这些类型之一
def predict(
	value: EditorValue | None
)
	...

作为输出组件: 期望一个 EditorValue,它只是一个字典,包含键:'background'、'layers' 和 'composite'。 'background' 和 'composite' 对应的值应该是图像或 None,而 layers 应该是一个图像列表。 图像类型可以是 PIL.Imagenp.arraystr 文件路径/URL。 或者,该值可以只是一个单独的图像 (ImageType),在这种情况下,它将被用作背景。

你的函数应该返回这些类型之一
def predict(···) -> EditorValue | ImageType | None
	...	
	return value

初始化

参数
🔗
value: EditorValue | ImageType | None
default = None

用于填充图像编辑器的可选初始图像。 应该是一个字典,包含键:`background`、`layers` 和 `composite`。 `background` 和 `composite` 对应的值应该是图像或 None,而 `layers` 应该是一个图像列表。 图像类型可以是 PIL.Image、np.array 或 str 文件路径/URL。 或者,该值可以是可调用对象,在这种情况下,每当应用程序加载时都会调用该函数以设置组件的初始值。

🔗
height: int | str | None
default = None

组件的高度,如果传递数字,则以像素为单位指定;如果传递字符串,则以 CSS 单位指定。 这对预处理的图像文件或 numpy 数组没有影响,但会影响显示的图像。 请注意与 canvas_size 参数的冲突值。 如果 canvas_size 大于高度,则编辑画布将不适合组件。

🔗
width: int | str | None
default = None

组件的宽度,如果传递数字,则以像素为单位指定;如果传递字符串,则以 CSS 单位指定。 这对预处理的图像文件或 numpy 数组没有影响,但会影响显示的图像。 请注意与 canvas_size 参数的冲突值。 如果 canvas_size 大于高度,则编辑画布将不适合组件。

🔗
image_mode: Literal['1', 'L', 'P', 'RGB', 'RGBA', 'CMYK', 'YCbCr', 'LAB', 'HSV', 'I', 'F']
default = "RGBA"

"RGB" 表示彩色,"L" 表示黑白。 有关其他支持的图像模式及其含义,请参阅 https://pillow.pythonlang.cn/en/stable/handbook/concepts.html。

🔗
sources: Iterable[Literal['upload', 'webcam', 'clipboard']] | Literal['upload', 'webcam', 'clipboard'] | None
default = ('upload', 'webcam', 'clipboard')

可用于设置背景图像的来源列表。 "upload" 创建一个用户可以拖放图像文件的框,"webcam" 允许用户从他们的网络摄像头拍照,"clipboard" 允许用户从剪贴板粘贴图像。

🔗
type: Literal['numpy', 'pil', 'filepath']
default = "numpy"

图像在传递到预测函数之前转换成的格式。 "numpy" 将图像转换为形状为 (height, width, 3) 且值从 0 到 255 的 numpy 数组,"pil" 将图像转换为 PIL 图像对象,"filepath" 将图像作为 str 文件路径传递到图像的临时副本。

🔗
label: str | None
default = None

此组件的标签。 出现在组件上方,如果此组件有示例表格,也用作标题。 如果为 None 且在 `gr.Interface` 中使用,则标签将是此组件分配到的参数名称。

🔗
every: Timer | float | None
default = None

如果 `value` 是一个函数,则持续调用 `value` 以重新计算它(否则无效)。 可以提供一个 Timer,其刻度重置 `value`,或者一个浮点数,它提供重置 Timer 的常规间隔。

🔗
inputs: Component | list[Component] | set[Component] | None
default = None

如果 `value` 是一个函数,则用作计算 `value` 的输入的组件(否则无效)。 每当输入更改时,`value` 都会重新计算。

🔗
show_label: bool | None
default = None

如果为 True,将显示标签。

🔗
show_download_button: bool
default = True

如果为 True,将显示下载图像的按钮。

🔗
container: bool
default = True

如果为 True,则将组件放置在容器中 - 在边框周围提供一些额外的填充。

🔗
scale: int | None
default = None

相对于相邻组件的相对大小。 例如,如果组件 A 和 B 在 Row 中,并且 A 的 scale=2,而 B 的 scale=1,则 A 将是 B 的两倍宽。 应该是一个整数。 scale 应用于 Rows,以及 Blocks 中 fill_height=True 的顶级组件。

🔗
min_width: int
default = 160

最小像素宽度,如果屏幕空间不足以满足此值,则会换行。 如果某个 scale 值导致此组件比 min_width 窄,则将首先遵守 min_width 参数。

🔗
interactive: bool | None
default = None

如果为 True,将允许用户上传和编辑图像;如果为 False,则只能用于显示图像。 如果未提供,则根据组件是用作输入还是输出来推断。

🔗
visible: bool
default = True

如果为 False,组件将被隐藏。

🔗
elem_id: str | None
default = None

一个可选的字符串,分配为 HTML DOM 中此组件的 id。 可用于定位 CSS 样式。

🔗
elem_classes: list[str] | str | None
default = None

一个可选的字符串列表,分配为 HTML DOM 中此组件的类。 可用于定位 CSS 样式。

🔗
render: bool
default = True

如果为 False,组件将不会在 Blocks 上下文中呈现。 如果目的是现在分配事件侦听器,但稍后呈现组件,则应使用此选项。

🔗
key: int | str | None
default = None

如果已分配,将用于在重新渲染时假定身份。 在重新渲染时具有相同键的组件将保留其值。

🔗
placeholder: str | None
default = None

上传区域的自定义文本。 提供时,会覆盖默认上传消息。 接受新行和 `#` 来指定标题。

🔗
mirror_webcam: bool
default = True

如果为 True,网络摄像头将被镜像。 默认值为 True。

🔗
show_share_button: bool | None
default = None

如果为 True,将在组件的角落显示一个共享图标,允许用户将输出共享到 Hugging Face Spaces Discussions。 如果为 False,则不显示图标。 如果设置为 None(默认行为),则当此 Gradio 应用程序在 Spaces 上启动时,图标会显示,否则不显示。

🔗
crop_size: tuple[int | float, int | float] | str | None
default = None

已弃用。 用于设置 `canvas_size` 参数。

🔗
transforms: Iterable[Literal['crop', 'resize']] | None
default = ('crop', 'resize')

提供给用户的变换工具。 "crop" 允许用户裁剪图像。

🔗
eraser: Eraser | None | Literal[False]
default = None

图像编辑器中橡皮擦工具的选项。 应该是 `gr.Eraser` 类的实例,或者 None 以使用默认设置。 也可以为 False 以隐藏橡皮擦工具。 请参阅 `gr.Eraser` 文档

🔗
brush: Brush | None | Literal[False]
default = None

图像编辑器中画笔工具的选项。 应该是 `gr.Brush` 类的实例,或者 None 以使用默认设置。 也可以为 False 以隐藏画笔工具,这也将隐藏橡皮擦工具。 请参阅 `gr.Brush` 文档

🔗
format: str
default = "webp"

如果图像尚未具有有效格式,则保存图像的格式(例如,如果图像作为 numpy 数组或 PIL Image 返回到前端)。 该格式应受 PIL 库支持。 此参数对 SVG 文件无效。

🔗
layers: bool | LayerOptions
default = True

图像编辑器中图层工具的选项。 可以是布尔值或 `gr.LayerOptions` 类的实例。 如果为 True,将允许用户向图像添加图层。 如果为 False,则图层选项将被隐藏。 如果是 `gr.LayerOptions` 的实例,它将用于配置图层工具。 请参阅 `gr.LayerOptions` 文档

🔗
canvas_size: tuple[int, int]
default = (800, 800)

画布的初始大小,以像素为单位。 第一个值是宽度,第二个值是高度。 如果 `fixed_canvas` 为 `True`,则上传的图像将被重新缩放以适应画布大小,同时保持纵横比。 否则,画布大小将更改以匹配上传图像的大小。

🔗
fixed_canvas: bool
default = False

如果为 True,则画布大小不会根据背景图像的大小而更改,并且图像将被重新缩放以适应(同时保持纵横比)并放置在画布的中心。

🔗
show_fullscreen_button: bool
default = True

如果为 True,将显示以全屏模式查看图像的按钮。

快捷方式

界面字符串快捷方式 初始化

gradio.ImageEditor

"imageeditor"

使用默认值

gradio.Sketchpad

"sketchpad"

使用 sources=(), brush=Brush(colors=["#000000"], color_mode="fixed")

gradio.Paint

"paint"

使用 sources=()

gradio.ImageMask

"imagemask"

使用 brush=Brush(colors=["#000000"], color_mode="fixed")

演示

import gradio as gr
import time


def sleep(im):
    time.sleep(5)
    return [im["background"], im["layers"][0], im["layers"][1], im["composite"]]


def predict(im):
    return im["composite"]


with gr.Blocks() as demo:
    with gr.Row():
        im = gr.ImageEditor(
            type="numpy",
            crop_size="1:1",
        )
        im_preview = gr.Image()
    n_upload = gr.Number(0, label="Number of upload events", step=1)
    n_change = gr.Number(0, label="Number of change events", step=1)
    n_input = gr.Number(0, label="Number of input events", step=1)

    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(predict, outputs=im_preview, inputs=im, show_progress="hidden")

if __name__ == "__main__":
    demo.launch()

		

事件监听器

描述

事件监听器允许您响应用户与您在 Gradio Blocks 应用程序中定义的 UI 组件的交互。 当用户与元素交互时,例如更改滑块值或上传图像,将调用一个函数。

支持的事件监听器

ImageEditor 组件支持以下事件监听器。 每个事件监听器都采用相同的参数,这些参数在下面的 事件参数 表格中列出。

监听器 描述

ImageEditor.clear(fn, ···)

当用户使用组件的清除按钮清除 ImageEditor 时,将触发此监听器。

ImageEditor.change(fn, ···)

当 ImageEditor 的值因用户输入(例如,用户在文本框中键入)或因函数更新(例如,图像从事件触发器的输出接收值)而更改时触发。 有关仅由用户输入触发的侦听器,请参阅 .input()

ImageEditor.input(fn, ···)

当用户更改 ImageEditor 的值时,将触发此监听器。

ImageEditor.select(fn, ···)

当用户选择或取消选择 ImageEditor 时触发的事件监听器。 使用事件数据 gradio.SelectData 来携带 value,指代 ImageEditor 的标签,以及 selected,指代 ImageEditor 的状态。 有关如何使用此事件数据,请参阅 EventData 文档

ImageEditor.upload(fn, ···)

当用户将文件上传到 ImageEditor 时,将触发此监听器。

ImageEditor.apply(fn, ···)

当用户通过集成的 UI 操作将更改应用于 ImageEditor 时,将触发此监听器。

事件参数

参数
🔗
fn: Callable | None | Literal['decorator']
default = "decorator"

触发此事件时要调用的函数。 通常是机器学习模型的预测函数。 该函数的每个参数对应于一个输入组件,并且该函数应返回单个值或值元组,元组中的每个元素对应于一个输出组件。

🔗
inputs: Component | BlockContext | list[Component | BlockContext] | Set[Component | BlockContext] | None
default = None

用作输入的 gradio.components 列表。 如果该函数不接受任何输入,则应为空列表。

🔗
outputs: Component | BlockContext | list[Component | BlockContext] | Set[Component | BlockContext] | None
default = None

用作输出的 gradio.components 列表。 如果该函数不返回任何输出,则应为空列表。

🔗
api_name: str | None | Literal[False]
default = None

定义端点在 API 文档中的显示方式。 可以是字符串、None 或 False。 如果设置为字符串,则端点将以给定的名称在 API 文档中公开。 如果为 None(默认值),则函数的名称将用作 API 端点。 如果为 False,则端点将不会在 API 文档中公开,并且下游应用程序(包括 `gr.load` 此应用程序的应用程序)将无法使用此事件。

🔗
scroll_to_output: bool
default = False

如果为 True,将在完成时滚动到输出组件

🔗
show_progress: Literal['full', 'minimal', 'hidden']
default = "full"

在事件运行时如何显示进度动画:"full" 显示一个覆盖输出组件区域的微调器以及右上角的运行时显示,"minimal" 仅显示运行时显示,"hidden" 完全不显示进度动画

🔗
show_progress_on: Component | list[Component] | None
default = None

在其上显示进度动画的组件或组件列表。 如果为 None,将在所有输出组件上显示进度动画。

🔗
queue: bool
default = True

如果为 True,则会将请求放在队列中(如果已启用队列)。 如果为 False,即使已启用队列,也不会将此事件放入队列中。 如果为 None,将使用 gradio 应用程序的队列设置。

🔗
batch: bool
default = False

如果为 True,则该函数应处理一批输入,这意味着它应该接受每个参数的输入值列表。 列表的长度应相等(并且长度最多为 `max_batch_size`)。 然后*要求*该函数返回列表元组(即使只有一个输出组件),元组中的每个列表对应于一个输出组件。

🔗
max_batch_size: int
default = 4

如果从队列中调用此函数,则要批处理在一起的最大输入数量(仅在 batch=True 时相关)

🔗
preprocess: bool
default = True

如果为 False,则在运行 'fn' 之前不会运行组件数据的预处理(例如,如果使用 `Image` 组件调用此方法,则将其保留为 base64 字符串)。

🔗
postprocess: bool
default = True

如果为 False,则在将 'fn' 输出返回到浏览器之前不会运行组件数据的后处理。

🔗
cancels: dict[str, Any] | list[dict[str, Any]] | None
default = None

触发此监听器时要取消的其他事件列表。 例如,设置 cancels=[click_event] 将取消 click_event,其中 click_event 是另一个组件的 .click 方法的返回值。 尚未运行的函数(或正在迭代的生成器)将被取消,但当前正在运行的函数将被允许完成。

🔗
trigger_mode: Literal['once', 'multiple', 'always_last'] | None
default = None

如果为 "once"(除 `.change()` 之外的所有事件的默认值),则在事件挂起时不允许任何提交。 如果设置为 "multiple",则在挂起时允许无限次提交,而 "always_last"(`.change()` 和 `.key_up()` 事件的默认值)将在挂起事件完成后允许第二次提交。

🔗
js: str | Literal[True] | None
default = None

在运行 'fn' 之前要运行的可选前端 js 方法。 js 方法的输入参数是 'inputs' 和 'outputs' 的值,返回值应该是输出组件的值列表。

🔗
concurrency_limit: int | None | Literal['default']
default = "default"

如果设置,这是可以同时运行的此事件的最大数量。 可以设置为 None 表示没有 concurrency_limit(可以同时运行任意数量的此事件)。 设置为 "default" 以使用默认并发限制(由 `Blocks.queue()` 中的 `default_concurrency_limit` 参数定义,默认情况下它本身为 1)。

🔗
concurrency_id: str | None
default = None

如果设置,这是并发组的 id。 具有相同 concurrency_id 的事件将受到最低设置的 concurrency_limit 的限制。

🔗
show_api: bool
default = True

是否在 Gradio 应用程序的“view API”页面或 Gradio 客户端的 ".view_api()" 方法中显示此事件。 与将 api_name 设置为 False 不同,将 show_api 设置为 False 仍将允许下游应用程序以及 Clients 使用此事件。 如果 fn 为 None,则 show_api 将自动设置为 False。

🔗
time_limit: int | None
default = None
🔗
stream_every: float
default = 0.5
🔗
like_user_message: bool
default = False

助手类

Brush

gradio.Brush(···)

描述

用于指定 ImageEditor 组件中画笔工具选项的数据类。 此类的实例可以传递给 gr.ImageEditorbrush 参数。

初始化

参数
🔗
default_size: int | Literal['auto']
default = "auto"

画笔工具的默认半径,以像素为单位。 默认为 "auto",在这种情况下,半径会根据图像的大小自动确定(通常是较小尺寸的 1/50)。

🔗
colors: list[str | tuple[str, float]] | str | tuple[str, float] | None
default = None

在使用画笔时提供给用户的颜色列表。 默认为 5 种颜色的列表。

🔗
default_color: str | tuple[str, float] | None
default = None

画笔的默认颜色。 默认为 `colors` 列表中的第一种颜色。

🔗
color_mode: Literal['fixed', 'defaults']
default = "defaults"

如果设置为 "fixed",用户只能从 `colors` 中的颜色中选择。 如果为 "defaults",则 `colors` 中的颜色作为默认调色板提供,但用户也可以使用颜色选择器选择任何颜色。

Eraser

gradio.Eraser(···)

描述

用于指定 ImageEditor 组件中橡皮擦工具选项的数据类。 此类的实例可以传递给 gr.ImageEditoreraser 参数。

初始化

参数
🔗
default_size: int | Literal['auto']
default = "auto"

橡皮擦工具的默认半径,以像素为单位。 默认为 "auto",在这种情况下,半径会根据图像的大小自动确定(通常是较小尺寸的 1/50)。

Layer Options

gradio.LayerOptions(···)

描述

用于指定 ImageEditor 组件中图层工具选项的数据类。 此类的实例可以传递给 gr.ImageEditorlayers 参数。

初始化

参数
🔗
allow_additional_layers: bool
default = True

如果为 True,用户可以向图像添加其他图层。 如果为 False,则不会显示添加图层按钮。

🔗
layers: list[str] | None
default = None

在使用图层工具时提供给用户的图层列表。 必须提供一个图层,如果列表的长度为 0,则会自动生成一个图层。

🔗
disabled: bool
default = False