本仓库是 SimpleMDE,由 Sparksuite 制作 的一个分支。 更多信息请查看 专门的章节。
这是一个用于编写美观易懂的 Markdown 的即插即用的 JavaScript 文本区域替代品。 EasyMDE 允许经验较少的 Markdown 用户使用熟悉的工具栏按钮和快捷键。
此外,在编辑时会实时渲染语法,清晰地显示预期结果。标题更大,强调的词语变为斜体,链接带有下划线等。
EasyMDE 还具有内置的自动保存和拼写检查功能。 编辑器完全可定制,从主题到工具栏按钮和 JavaScript 钩子都可以自定义。
通过 npm:
npm install easymde
通过 UNPKG CDN:
<link rel="stylesheet" href="https://unpkg.com/easymde/dist/easymde.min.css"> <script src="https://unpkg.com/easymde/dist/easymde.min.js"></script>
或 jsDelivr:
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/easymde/dist/easymde.min.css"> <script src="https://cdn.jsdelivr.net/npm/easymde/dist/easymde.min.js"></script>
安装和/或导入模块后,你可以将 EasyMDE 加载到网页上的第一个 textarea
元素:
<textarea></textarea> <script> const easyMDE = new EasyMDE(); </script>
或者你可以通过 JavaScript 选择特定的 textarea
:
<textarea id="my-text-area"></textarea> <script> const easyMDE = new EasyMDE({element: document.getElementById('my-text-area')}); </script>
使用 easyMDE.value()
获取编辑器的内容:
<script> easyMDE.value(); </script>
使用 easyMDE.value(val)
设置编辑器的内容:
<script> easyMDE.value('New input for **EasyMDE**'); </script>
true
,则强制下载Font Awesome(用于图标)。如果设置为 false
,则阻止下载。默认为 undefined
,会智能检查Font Awesome是否已经包含,然后相应地下载。true
,则自动聚焦编辑器。默认为 false
。true
,则自动保存文本。默认为 false
。10000
(10秒)。autosave.delay
或 10000
(10秒)。locale: en-US, format: hour:minute
。{ delay: 300 }
,它将每300毫秒检查一次编辑器是否可见,如果是,则调用CodeMirror的 refresh()
。**
或 __
。默认为 **
。```
或 ~~~
。默认为 ```
。*
或 _
。默认为 *
。*
、-
或 +
。默认为 *
。textarea
元素的DOM元素。默认为页面上的第一个 textarea
元素。true
,强制在EasyMDE中做的文本更改立即存储在原始文本区域中。默认为 false
。false
,则使用空格而不是制表符进行缩进。默认为 true
。false
,图片预览仅会出现在单独行上的 图片。
括号之间的解析字符串作为参数,并返回一个字符串,作为预览中 <img>
标签的 src
属性。允许在前端动态预览图片,无需上传到服务器,允许将图片复制粘贴到编辑器中并进行预览。["[", "](http://)"]
。
true
,在编辑器中启用行号。false
,禁用换行。默认为 true
。"500px"
。默认为 "300px"
。minHeight
选项将被忽略。应该是一个包含有效CSS值的字符串,如 "500px"
。默认为 undefined
。true
,否则为 false
。true
,将在 #
后没有空格的情况下渲染标题。默认为 false
。false
,将不处理GFM删除线语法。默认为 true
。true
,让下划线作为分隔单词的分隔符。默认为 false
。false
,将替换默认Markdown模式返回的CSS类。否则,自定义模式返回的类将与默认模式返回的类组合。默认为 true
。"editor-preview"
。true
,会出现一个JS警告窗口,要求输入链接或图片URL。默认为 false
。URL of the image:
。URL for the link:
。true
,启用图片上传功能,可以通过拖放、复制粘贴和点击上传图片图标打开的浏览文件窗口触发。默认为 false
。1024 * 1024 * 2
(2 MB)。image/png, image/jpeg
。imageMaxSize
、imageAccept
、imageUploadEndpoint
和 imageCSRFToken
选项失效。
onSuccess
和 onError
回调函数作为参数。onSuccess(imageUrl: string)
和 onError(errorMessage: string)
{"data": {"filePath": "<filePath>"}}
,其中 filePath 是图片的路径(如果 imagePathAbsolute
设置为true则为绝对路径,否则为相对路径);{"error": "<errorCode>"}
,其中 errorCode 可以是 noFileGiven
(HTTP 400 Bad Request)、typeNotAllowed
(HTTP 415 Unsupported Media Type)、fileTooLarge
(HTTP 413 Payload Too Large)或 importError
(参见下面的 errorMessages)。如果 errorCode 不是 errorMessages 之一,它将原样提示给用户。这允许服务器端错误消息。
无默认值。true
,将把 imageUploadFunction
中的 imageUrl
和 imageUploadEndpoint
返回的 filePath 视为绝对路径,而不是相对路径,即不会在前面加上 window.location.origin
。imageCSRFToken
有值时应用,默认为 csrfmiddlewaretoken
。true
,通过头部传递CSRF令牌。默认为 false
,通过请求体传递CSRF。#image_name#
、#image_size#
和 #image_max_size#
将被它们各自的值替换,可用于自定义或国际化:
uploadImage
设置为 true
,初始显示的状态消息。默认为 Attach files by drag and dropping or pasting from clipboard.
。Drop image to upload it.
。Uploading images #images_names#
。Uploading #file_name#: #progress#%
。Uploaded #image_name#
。 B, KB, MB
(例如:218 KB
)。如果你喜欢不带空格,可以使用 B,KB,MB
(218KB
)。errorCallback
选项显示给用户的错误,其中 #image_name#
、#image_size#
和 #image_max_size#
将被它们各自的值替换,可用于自定义或国际化:
You must select a file.
。imageAccept
列表不匹配,或服务器返回此错误代码。默认为"不允许此图片类型"。imageMaxSize
,或服务器返回此错误代码。默认为"图片#image_name#太大(#image_size#)。\n最大文件大小为#image_max_size#"。(errorMessage) => alert(errorMessage)
。true
,将使用highlight.js进行高亮。默认为false
。要使用此功能,您必须在页面中包含highlight.js或通过hljs
选项传入。例如,包含脚本和CSS文件如下:<br><script src="https://cdn.jsdelivr.net/highlight.js/latest/highlight.min.js"></script>
<br><link rel="stylesheet" href="https://cdn.jsdelivr.net/highlight.js/latest/styles/github.min.css">
window.hljs
),可以在此提供一个实例。默认为undefined
。renderingConfig
选项将优先生效。false
,禁用解析GitHub风格Markdown(GFM)单行换行。默认为true
。false
,禁用拼写检查器。默认为true
。可选择传入符合CodeMirrorSpellChecker的函数。textarea
或contenteditable
。桌面默认为textarea
,移动设备默认为contenteditable
。contenteditable
选项对启用原生拼写检查是必要的。false
,禁用原生拼写检查器。默认为true
。false
,允许并排编辑而不进入全屏模式。默认为true
。false
,隐藏状态栏。默认为内置状态栏项目数组。
false
,从选中行移除CodeMirror-selectedtext
类。默认为true
。false
,禁用并排模式下的滚动同步。默认为true
。2
。easymde
。false
,隐藏工具栏。默认为图标数组。false
,禁用工具栏按钮提示。默认为true
。"mde"
时,加粗按钮的类变为"mde-bold"
。rtl
或ltr
。更改文本方向以支持从右到左的语言。默认为ltr
。大多数选项展示了非默认行为:
const editor = new EasyMDE({ autofocus: true, autosave: { enabled: true, uniqueId: "MyUniqueID", delay: 1000, submit_delay: 5000, timeFormat: { locale: 'en-US', format: { year: 'numeric', month: 'long', day: '2-digit', hour: '2-digit', minute: '2-digit', }, }, text: "自动保存: " }, blockStyles: { bold: "__", italic: "_", }, unorderedListStyle: "-", element: document.getElementById("MyID"), forceSync: true, hideIcons: ["guide", "heading"], indentWithTabs: false, initialValue: "你好,世界!", insertTexts: { horizontalRule: ["", "\n\n-----\n\n"], image: [""], link: ["[", "](https://)"], table: ["", "\n\n| 第1列 | 第2列 | 第3列 |\n| -------- | -------- | -------- |\n| 文本 | 文本 | 文本 |\n\n"], }, lineWrapping: false, minHeight: "500px", parsingConfig: { allowAtxHeaderWithoutSpace: true, strikethrough: false, underscoresBreakWords: true, }, placeholder: "在此输入...", previewClass: "my-custom-styling", previewClass: ["my-custom-styling", "more-custom-styling"], previewRender: (plainText) => customMarkdownParser(plainText), // 返回自定义解析器的HTML previewRender: (plainText, preview) => { // 异步方法 setTimeout(() => { preview.innerHTML = customMarkdownParser(plainText); }, 250); // 如果返回null,预览的innerHTML将不会被覆盖。 // 如果您通过vdom diffing控制预览节点的内容,这很有用。 // return null; return "加载中..."; }, promptURLs: true, promptTexts: { image: "自定义URL提示:", link: "自定义URL提示:", }, renderingConfig: { singleLineBreaks: false, codeSyntaxHighlighting: true, sanitizerFunction: (renderedHTML) => { // 使用DOMPurify并只允许<b>标签 return DOMPurify.sanitize(renderedHTML, {ALLOWED_TAGS: ['b']}) }, }, shortcuts: { drawTable: "Cmd-Alt-T" }, showIcons: ["code", "table"], spellChecker: false, status: false, status: ["autosave", "lines", "words", "cursor"], // 可选用法 status: ["autosave", "lines", "words", "cursor", { className: "keystrokes", defaultValue: (el) => { el.setAttribute('data-keystrokes', 0); }, onUpdate: (el) => { const keystrokes = Number(el.getAttribute('data-keystrokes')) + 1; el.innerHTML = `${keystrokes} 次按键`; el.setAttribute('data-keystrokes', keystrokes); }, }], // 另一种可选用法 ,带有统计按键次数的自定义状态栏项 styleSelectedText: false, sideBySideFullscreen: false, syncSideBySidePreviewScroll: false, tabSize: 4, toolbar: false, toolbarTips: false, toolbarButtonClassPrefix: "mde", });
以下是内置的工具栏图标(默认只启用了其中的一部分),你可以随意重新组织它们。"名称"是在JavaScript中引用的图标名称。"动作"可以是函数或要打开的URL。"类"是赋予图标的类。"工具提示"是通过title=""
属性显示的小提示。请注意,快捷键提示会自动添加,并反映指定动作的键绑定(例如,当action
设置为bold
且tooltip
设置为粗体
时,用户最终看到的文本将是"粗体 (Ctrl-B)")。
此外,你可以通过在工具栏数组中添加"|"
来在任意图标之间添加分隔符。
名称 | 动作 | 工具提示<br>类 |
---|---|---|
bold | toggleBold | 粗体<br>fa fa-bold |
italic | toggleItalic | 斜体<br>fa fa-italic |
strikethrough | toggleStrikethrough | 删除线<br>fa fa-strikethrough |
heading | toggleHeadingSmaller | 标题<br>fa fa-header |
heading-smaller | toggleHeadingSmaller | 较小标题<br>fa fa-header |
heading-bigger | toggleHeadingBigger | 较大标题<br>fa fa-lg fa-header |
heading-1 | toggleHeading1 | 大标题<br>fa fa-header header-1 |
heading-2 | toggleHeading2 | 中标题<br>fa fa-header header-2 |
heading-3 | toggleHeading3 | 小标题<br>fa fa-header header-3 |
code | toggleCodeBlock | 代码<br>fa fa-code |
quote | toggleBlockquote | 引用<br>fa fa-quote-left |
unordered-list | toggleUnorderedList | 无序列表<br>fa fa-list-ul |
ordered-list | toggleOrderedList | 有序列表<br>fa fa-list-ol |
clean-block | cleanBlock | 清除格式<br>fa fa-eraser |
link | drawLink | 创建链接<br>fa fa-link |
image | drawImage | 插入图片<br>fa fa-picture-o |
upload-image | drawUploadedImage | 打开文件浏览窗口<br>fa fa-image |
table | drawTable | 插入表格<br>fa fa-table |
horizontal-rule | drawHorizontalRule | 插入水平线<br>fa fa-minus |
preview | togglePreview | 切换预览<br>fa fa-eye no-disable |
side-by-side | toggleSideBySide | 切换并排显示<br>fa fa-columns no-disable no-mobile |
fullscreen | toggleFullScreen | 切换全屏<br>fa fa-arrows-alt no-disable no-mobile |
guide | 此链接 | Markdown指南<br>fa fa-question-circle |
undo | undo | 撤销<br>fa fa-undo |
redo | redo | 重做<br>fa fa-redo |
使用toolbar
选项自定义工具栏。
仅调整现有按钮的顺序:
const easyMDE = new EasyMDE({ toolbar: ["bold", "italic", "heading", "|", "quote"] });
所有信息和/或添加你自己的图标或文本
const easyMDE = new EasyMDE({ toolbar: [ { name: "bold", action: EasyMDE.toggleBold, className: "fa fa-bold", title: "粗体", }, "italic", // 预制按钮的快捷方式 { name: "custom", action: (editor) => { // 添加你自己的代码 }, className: "fa fa-star", text: "已加星标", title: "自定义按钮", attributes: { // 用于自定义属性 id: "custom-id", "data-value": "custom value" // HTML5 data-* 属性需要用引号("")括起来,因为其名称中包含连字符(-)。 } }, "|" // 分隔符 // [, ...] ] });
将一些按钮放在下拉菜单中
const easyMDE = new EasyMDE({ toolbar: [{ name: "heading", action: EasyMDE.toggleHeadingSmaller, className: "fa fa-header", title: "标题", }, "|", { name: "others", className: "fa fa-blind", title: "其他按钮", children: [ { name: "image", action: EasyMDE.drawImage, className: "fa fa-picture-o", title: "图片", }, { name: "quote", action: EasyMDE.toggleBlockquote, className: "fa fa-percent", title: "引用", }, { name: "link", action: EasyMDE.drawLink, className: "fa fa-link", title: "链接", } ] }, // [, ...] ] });
EasyMDE自带一系列预定义的键盘快捷键,但可以通过配置选项进行更改。以下是默认快捷键列表:
快捷键 (Windows / Linux) | 快捷键 (macOS) | 操作 |
---|---|---|
<kbd>Ctrl</kbd>-<kbd>'</kbd> | <kbd>Cmd</kbd>-<kbd>'</kbd> | "切换引用块" |
<kbd>Ctrl</kbd>-<kbd>B</kbd> | <kbd>Cmd</kbd>-<kbd>B</kbd> | "切换粗体" |
<kbd>Ctrl</kbd>-<kbd>E</kbd> | <kbd>Cmd</kbd>-<kbd>E</kbd> | "清除块" |
<kbd>Ctrl</kbd>-<kbd>H</kbd> | <kbd>Cmd</kbd>-<kbd>H</kbd> | "减小标题级别" |
<kbd>Ctrl</kbd>-<kbd>I</kbd> | <kbd>Cmd</kbd>-<kbd>I</kbd> | "切换斜体" |
<kbd>Ctrl</kbd>-<kbd>K</kbd> | <kbd>Cmd</kbd>-<kbd>K</kbd> | "插入链接" |
<kbd>Ctrl</kbd>-<kbd>L</kbd> | <kbd>Cmd</kbd>-<kbd>L</kbd> | "切换无序列表" |
<kbd>Ctrl</kbd>-<kbd>P</kbd> | <kbd>Cmd</kbd>-<kbd>P</kbd> | "切换预览" |
<kbd>Ctrl</kbd>-<kbd>Alt</kbd>-<kbd>C</kbd> | <kbd>Cmd</kbd>-<kbd>Alt</kbd>-<kbd>C</kbd> | "切换代码块" |
<kbd>Ctrl</kbd>-<kbd>Alt</kbd>-<kbd>I</kbd> | <kbd>Cmd</kbd>-<kbd>Alt</kbd>-<kbd>I</kbd> | "插入图片" |
<kbd>Ctrl</kbd>-<kbd>Alt</kbd>-<kbd>L</kbd> | <kbd>Cmd</kbd>-<kbd>Alt</kbd>-<kbd>L</kbd> | "切换有序列表" |
<kbd>Shift</kbd>-<kbd>Ctrl</kbd>-<kbd>H</kbd> | <kbd>Shift</kbd>-<kbd>Cmd</kbd>-<kbd>H</kbd> | "增大标题级别" |
<kbd>F9</kbd> | <kbd>F9</kbd> | "切换并排视图" |
<kbd>F11</kbd> | <kbd>F11</kbd> | "切换全屏" |
<kbd>Ctrl</kbd>-<kbd>Alt</kbd>-<kbd>1</kbd> | <kbd>Cmd</kbd>-<kbd>Alt</kbd>-<kbd>1</kbd> | "切换一级标题" |
<kbd>Ctrl</kbd>-<kbd>Alt</kbd>-<kbd>2</kbd> | <kbd>Cmd</kbd>-<kbd>Alt</kbd>-<kbd>2</kbd> | "切换二级标题" |
<kbd>Ctrl</kbd>-<kbd>Alt</kbd>-<kbd>3</kbd> | <kbd>Cmd</kbd>-<kbd>Alt</kbd>-<kbd>3</kbd> | "切换三级标题" |
<kbd>Ctrl</kbd>-<kbd>Alt</kbd>-<kbd>4</kbd> | <kbd>Cmd</kbd>-<kbd>Alt</kbd>-<kbd>4</kbd> | "切换四级标题" |
<kbd>Ctrl</kbd>-<kbd>Alt</kbd>-<kbd>5</kbd> | <kbd>Cmd</kbd>-<kbd>Alt</kbd>-<kbd>5</kbd> | "切换五级标题" |
<kbd>Ctrl</kbd>-<kbd>Alt</kbd>-<kbd>6</kbd> | <kbd>Cmd</kbd>-<kbd>Alt</kbd>-<kbd>6</kbd> | "切换六级标题" |
以下是如何更改一些快捷键,同时保留其他快捷键不变的方法:
const editor = new EasyMDE({ shortcuts: { "toggleOrderedList": "Ctrl-Alt-K", // 修改toggleOrderedList的快捷键 "toggleCodeBlock": null, // 解绑Ctrl-Alt-C "drawTable": "Cmd-Alt-T", // 将Cmd-Alt-T绑定到drawTable操作,该操作默认没有快捷键 } });
快捷键会自动在不同平台之间转换。如果你将快捷键定义为"Cmd-B",在PC上会自动变为"Ctrl-B"。相反,定义为"Ctrl-B"的快捷键在Mac用户那里会变成"Cmd-B"。
可以绑定的操作列表与工具栏按钮可用的内置操作列表相同。
你可以捕捉以下事件列表:https://codemirror.net/doc/manual.html#events
const easyMDE = new EasyMDE(); easyMDE.codemirror.on("change", () => { console.log(easyMDE.value()); });
你可以通过调用toTextArea
方法恢复到初始的文本区域。注意,这会清除与之关联的自动保存(如果启用的话)。文本区域将保留被销毁的EasyMDE实例中的任何文本。
const easyMDE = new EasyMDE(); // ... easyMDE.toTextArea(); easyMDE = null;
如果你需要移除注册的事件监听器(当不再需要编辑器时),调用easyMDE.cleanup()
。
以下自解释的方法在使用EasyMDE开发时可能会有用。
const easyMDE = new EasyMDE(); easyMDE.isPreviewActive(); // 返回布尔值 easyMDE.isSideBySideActive(); // 返回布尔值 easyMDE.isFullscreenActive(); // 返回布尔值 easyMDE.clearAutosavedValue(); // 无返回值
EasyMDE是SimpleMDE的延续。
SimpleMDE最初是对lepture的Editor项目的改进,但现在已经有了自己的特色。它与CodeMirror捆绑在一起,并依赖于Font Awesome。
CodeMirror是项目的核心,它在编写过程中解析大部分Markdown语法。这允许我们为正在编写的Markdown添加样式。此外,工具栏和状态栏分别被添加到顶部和底部。预览由Marked使用GitHub Flavored Markdown (GFM)渲染。
我最初创建这个分支是为了在SimpleMDE中实现FontAwesome 5的兼容性。完成后,我提交了一个拉取请求,但还没有被接受。这个情况,加上项目自2017年5月以来一直处于不活跃状态,促使我做出更多改变并尝试为项目注入新的生命力。
变更包括:
https://
我的目标是继续开发这个项目,改进它并保持其活跃性。
你可能想要编辑这个库以适应你的需求。这可以通过以下几个快速步骤完成:
gulp
命令,这将生成文件:dist/easymde.min.css
和dist/easymde.min.js
;想要为EasyMDE做出贡献吗?谢谢你!我们为你准备了一份贡献指南!
本项目基于MIT许可证发布。
OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。
openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功 能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。
高分辨率纹理 3D 资产生成
Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。
一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。
3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。
用于可扩展和多功能 3D 生成的结构化 3D 潜在表示
TRELLIS 是一个专注于 3D 生成的项目,它利用结构化 3D 潜在表示技术,实现了可扩展且多功能的 3D 生成。项目提供了多种 3D 生成的方法和工具,包括文本到 3D、图像到 3D 等,并且支持多种输出格式,如 3D 高斯、辐射场和网格等。通过 TRELLIS,用户可以根据文本描述或图像输入快速生成高质量的 3D 资产,适用于游戏开发、动画制作、虚拟现实等多个领域。
10 节课教你开启构建 AI 代理所需的一切知识
AI Agents for Beginners 是一个专 为初学者打造的课程项目,提供 10 节课程,涵盖构建 AI 代理的必备知识,支持多种语言,包含规划设计、工具使用、多代理等丰富内容,助您快速入门 AI 代理领域。
AI Excel全自动制表工具
AEE 在线 AI 全自动 Excel 编辑器,提供智能录入、自动公式、数据整理、图表生成等功能,高效处理 Excel 任务,提升办公效率。支持自动高亮数据、批量计算、不规则数据录入,适用于企业、教育、金融等多场景。
基于 UI-TARS 视觉语言模型的桌面应用,可通过自然语言控制计算机进行多模态操作。
UI-TARS-desktop 是一款功能强大的桌面应用,基于 UI-TARS(视觉语言模型)构建。它具备自然语言控制、截图与视觉识别、精确的鼠标键盘控制等功能,支持跨平台使用(Windows/MacOS),能提供实时反馈和状态显示,且数据完全本地处理,保障隐私安全。该应用集成了多种大语言模型和搜索方式,还可进行文件系统操作。适用于需要智能交互和自动化任务的场景,如信息检索、文件管理等。其提供了详细的文档,包括快速启动、部署、贡献指南和 SDK 使用说明等,方便开发者使用和扩展。
开源且先进的大规模视频生成模型项目
Wan2.1 是一个开源且先进的大规模视频生成模型项目,支持文本到图像、文本到视频、图像到视频等多种生成任务。它具备丰富的配置选项,可调整分辨率、扩散步数等参数,还能对提示词进行增强。使用了多种先进技术和工具,在视频和图像生成领域具有广泛应用前景,适合研究人员和开发者使用。
全流程 AI 驱动的数据可视化工具,助力用户轻松创作高颜值图表
爱图表(aitubiao.com)就是AI图表,是由镝数科技推出的一款创新型智能数据可视化平台,专注于为用户提供便捷的图表生成、数据分析和报告撰写服务。爱图表是中国首个在图表场景接入DeepSeek的产品。通过接入前沿的DeepSeek系列AI模型,爱图表结合强大的数据处理能力与智能化功能,致力于帮助职场人士高效处理和表达数据,提升工作效率和报告质量。
一款强大的视觉语言模型,支持图像和视频输入
Qwen2.5-VL 是一款强大的视觉语言模型,支持图像和视频输入,可用于多种场景,如商品特点总结、图像文字识别等。项目提供了 OpenAI API 服务、Web UI 示例等部署方式, 还包含了视觉处理工具,有助于开发者快速集成和使用,提升工作效率。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号