← 全部文档

图片编辑器

让用户无需离开编辑器,就能对文档中已有的图片进行裁剪、旋转、翻转、绘制、标注或应用滤镜。保存时,编辑后的图片会经过您的上传处理程序,图片获得新的 URL;没有处理程序时,它会以 PNG data URL 的形式嵌入。

编辑器上方的 Image editor 对话框,显示一张带有 16:9 裁剪框的风景图片、裁剪预设 Custom、Square、3:2、4:3、5:4、7:5 和 16:9,以及底部的工具栏
在选中的图片上打开的图片编辑器,已选择裁剪工具和 16:9 预设。

启用

该功能由 imageeditor.js 插件提供(也包含在 plugins/all_plugins.js 中)。编辑工具本身位于 plugins/tui.image-editor/ 中,插件只在对话框打开时,才从 url_base + "/plugins/tui.image-editor/" 把它们加载到对话框中。部署时请让这个文件夹与插件放在一起。

按钮为 imageeditor("Image Editor")。它位于默认的图片工具栏(controltoolbar_IMG)中,用户点击图片时出现,因此不需要向主工具栏添加任何东西。在代码中,请先选中图片,然后运行 editor.execCommand("imageeditor")。

<link rel="stylesheet" href="/richtexteditor/rte_theme_default.css">
<script src="/richtexteditor/rte.js"></script>
<script src="/richtexteditor/plugins/all_plugins.js"></script>

<div id="editor"><p><img src="landscape.png" width="320" alt="Hills under a sun"></p></div>
<script>
// Called on Save with the edited picture: (file, callback(url, error)).
function uploadToServer(file, callback) {
  fetch("/upload", { method: "POST", headers: { "x-file-name": file.name }, body: file })
    .then(function (r) { return r.ok ? r.json() : Promise.reject(new Error("HTTP " + r.status)); })
    .then(function (data) { callback(data.url); })
    .catch(function (err) { callback(null, err.message); });
}
var editor = new RichTextEditor("#editor", { file_upload_handler: uploadToServer });
</script>

这与编辑器用于插入和拖放图片的处理程序是同一个;完整的服务器端示例请参阅上传文件。

选项

插件本身没有选项。它会读取以下选项:

选项默认值在这里的作用
file_upload_handler无保存时接收编辑后的图片。未设置时使用 window.rte_file_upload_handler。
url_base"/richtexteditor"加载 plugins/tui.image-editor/ 的位置。
controltoolbar_IMG包含 imageeditor从中删除 imageeditor 即可隐藏该按钮。
text_ie_title、text_ie_save、text_ie_saving、text_ie_uploadfailed、text_ie_nourl英文对话框标题、Save 按钮和上传消息。语言包会设置它们。

使用方法

对话框占窗口的 90%。底部的工具依次为 Undo、Redo、Reset、Delete、Delete all、Crop(Custom、Square、3:2、4:3、5:4、7:5、16:9)、Flip、Rotate、Draw、Shape、Icon、Text、Mask 和 Filter。Save 位于右上角;它旁边的框显示上传错误。

Save 的行为取决于上传处理程序:

  • 有处理程序时。图片以名为 image-<timestamp>.png、类型为 image/png 的 File 传入。在您调用回调之前,Save 显示 "Saving..."。callback(url) 会把图片的 src 设置为该 URL 并关闭对话框。callback(null, "File too large") 会让对话框保持打开、编辑内容保持不变,并显示 "Upload failed: File too large",以便用户重试。抛出异常的处理程序会以同样的方式显示其错误消息。
  • 没有处理程序时。图片的 src 变成一个 data:image/png;base64,... URL,对话框关闭。

只有 src 会改变。图片的 width、alt 和其他属性保持原样,因此裁剪为 16:9 的图片会保留原来的 width 属性,其高度随新的形状变化。上面运行中保存的 HTML(id 是编辑器为每张图片添加的,而不是这个插件):

<p><img src="/uploads/image-1793772809490.png" width="320" alt="Hills under a sun" id="rte-fig-cl2s5j0"></p>

注意事项

  • 结果始终是 PNG。JPEG 照片会以 PNG 的形式返回,通常更大:在我们的测试中,一张 640×400 的 JPEG 返回为 78 KB 的 PNG。如果您的服务器只接受部分扩展名,请允许 .png。
  • 没有处理程序时,即使 allowBase64Images 为 false,图片也会被嵌入。在 2.6.12 中,图片编辑器不检查这个设置。如果您关闭了 base64(请参阅图片存储),请同时设置上传处理程序,或者从 controltoolbar_IMG 中删除 imageeditor。
  • 来自其他网站的图片需要 CORS。图片会被绘制到 canvas 上,因此其他源上的图片必须带有 Access-Control-Allow-Origin 标头。如果没有,图片不会出现在对话框中,而且在 2.6.12 中,Save 会把它替换为一张空白的 300×150 PNG。请只编辑来自您自己域名或发送 CORS 标头的 CDN 上的图片。
  • 滤镜。在 2.6.12 中,勾选滤镜之后,对话框中的图片不会重新绘制;滤镜会应用到保存的图片上。在我们的测试中,Grayscale 和 Invert 的结果正确;Sepia 给出了错误的(紫色)颜色。保存之后请检查结果。
  • 键盘。工具面板无法完全用键盘操作。无障碍声明把这一点列为已知的不足。
  • 没有外部请求。打开编辑器和保存时,只加载了页面自身主机上 plugins/tui.image-editor/ 中的文件;插件关闭了该库的使用统计。

相关内容:图片编辑演示、上传文件、图片存储、图片库。