请注意,这是一个自我回答的问题。
这个问题是关于ToastUI图像编辑器v3.3.0的,但它也可能适用于较新版本。
当您使用此官方示例加载图像时:
// Create image editor
var imageEditor = new tui.component.ImageEditor('#my-image-editor canvas', {
cssMaxWidth: 1000, // Component default value: 1000
cssMaxHeight: 800 // Component default value: 800
});
// Load image
imageEditor.loadImageFromURL('img/sampleImage.jpg', 'My sample image')
编辑器不会加载图像。该函数既不抛出,也不返回任何指示失败的内容,您不会收到任何错误消息。它返回一个按照留档中指定的解析的promise。
它仅通过在初始配置中指定图像来加载图像,之后无法更改:
// Create image editor
var imageEditor = new tui.component.ImageEditor('#my-image-editor canvas', {
includeUI: {
loadImage: {
path: 'img/sampleImage.jpg',
name: 'My sample image'
},
},
cssMaxWidth: 1000, // Component default value: 1000
cssMaxHeight: 800 // Component default value: 800
});
似乎loadImageFromURL函数已损坏,根据其他用户loadImageFromFile
也有同样的问题。
关于这一点的问题已经在GitHub上提出,但基本上被忽略了。现在已经一个月了,不幸的是它还没有被修复。
所以问题是,当这个问题存在时,图像编辑器如何被欺骗而工作。
这里有一把小提琴表明它不起作用:https://fiddle.sencha.com/#view/editor
在打开之前将此属性添加到要编辑的图像标签中:
crossorigin="anonymous"
如下所述:https://github.com/nhn/tui.image-editor/issues/68#issuecomment-930106372
对于那些正在使用Rails的人来说,当谈到@Forivin提出的第四个问题时,我就是这样做的,以使其工作。
问题是当Toast调用存储在S3上的图像时,我会在Chrome上得到一个CORS错误,但firefox没有问题。有很多关于这方面的文章,基本上我发现最好的方法是在代码中使用代理。我仍然可以让我的CORS原点指向我的主机,因为呼叫是通过代理从我的主机发出的,S3和Chrome很高兴。我的S3 CORS配置如下(允许子域):
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>http://*.mycompany.com</AllowedOrigin>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
在rails项目中,请执行以下操作:
添加机架代理gem在您的Gemfile
gem 'rack-proxy'
创建一个代理文件。s3路径经过URI编码并附加到路由末尾。该路由仅用于代理,因此它可以是任何内容,因为它将被重新路由到s3。
app/proxy/s3_代理。rb
class S3Proxy < Rack::Proxy
def perform_request(env)
if env['REQUEST_PATH'] =~ %r{^/my/dummy/path}
s3_path = CGI.unescape(env['REQUEST_PATH'][15..-1])
uri = URI.parse(s3_path)
env['HTTP_HOST'] = uri.host
env['SERVER_PORT'] = uri.port
env['REQUEST_PATH'] = s3_path
env['REQUEST_URI'] = s3_path
env['PATH_INFO'] = s3_path
env['rack.url_scheme'] = 'https'
super(env)
else
@app.call(env)
end
end
end
添加到应用程序。rb文件:
require "./app/proxy/s3_proxy"
class Application < Rails::Application
...
config.middleware.use S3Proxy
end
routes.rb
get "/my/dummy/path/:s3_url", to: "my_controller#dummy_path"
my_控制器中的控制器方法。rb
。这里呈现的内容无关紧要,因为它将被代理重定向。因为代理无论如何都会改变,所以我们可能没有办法逃脱。
def dummy_path
render plain: ""
end
最后,在我的Vue代码中,我通过首先填充一个空白的白色图像来调用Toast编辑器。然后,当安装组件时,我加载s3图像,覆盖现有图像并调整画布大小。我发现在读取s3图像之前安装它时需要一点延迟。s3图像是我在道具中传递的一个预先签名的url。
<template lang="pug">
.v-image-editor-tool
tui-image-editor(:include-ui='useDefaultUI' :options="editorOptions" ref="tuiImageEditor")
</template>
<script lang="coffee">
import { ImageEditor } from '@toast-ui/vue-image-editor'
import 'tui-image-editor/dist/tui-image-editor.min.css'
export default app =
props: ['imageUrl']
data: ->
useDefaultUI: true
editorOptions:
cssMaxWidth: 700
cssMaxHeight: 700
usageStatistics: false
includeUI:
loadImage:
path: 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'
name: 'Blank'
menuBarPosition: 'bottom'
mounted: ->
fn = => this.$refs.tuiImageEditor.invoke('loadImageFromURL', @imageUrl, 'Image').then (result) =>
this.$refs.tuiImageEditor.invoke('ui.resizeEditor', { imageSize: { newWidth: result.newWidth, newHeight: result.newHeight }})
setTimeout(fn, 600)
components:
'tui-image-editor': ImageEditor
</script>
TL;医生:这是一把小提琴:https://fiddle.sencha.com/#view/editor
长版本:
有四个问题:
第一个问题可以通过如下方式加载空白图像来解决:
var imageEditor = new tui.ImageEditor('#tui-image-editor-container', {
includeUI: {
loadImage: {
path: 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7',
name: 'Blank'
},
theme: whiteTheme,
menuBarPosition: 'bottom'
},
cssMaxWidth: 700,
cssMaxHeight: 700
});
第二个问题可以通过使用未记录的功能等待图像编辑器脱离其锁定状态来解决。您可以在运行时这样修补您的loadImageFromURL:
imageEditor.loadImageFromURL = (function() {
var cached_function = imageEditor.loadImageFromURL;
function waitUntilImageEditorIsUnlocked(imageEditor) {
return new Promise((resolve,reject)=>{
const interval = setInterval(()=>{
if (!imageEditor._invoker._isLocked) {
clearInterval(interval);
resolve();
}
}, 100);
})
}
return function() {
return waitUntilImageEditorIsUnlocked(imageEditor).then(()=>cached_function.apply(this, arguments));
};
})();
第三个问题可以通过获取loadImageFromURL返回的promise所解决的对象,并将新的和旧的宽度/高度属性传递给ui来解决。resizeEditor的功能如下:
imageEditor.loadImageFromURL("https://upload.wikimedia.org/wikipedia/en/thumb/8/80/Wikipedia-logo-v2.svg/526px-Wikipedia-logo-v2.svg.png", "SampleImage").then(result=>{
imageEditor.ui.resizeEditor({
imageSize: {oldWidth: result.oldWidth, oldHeight: result.oldHeight, newWidth: result.newWidth, newHeight: result.newHeight},
});
}).catch(err=>{
console.error("Something went wrong:", err);
})
第四个问题可能有点令人困惑。让我解释一下。在网站上,你可以使用<代码>
我想在我的基于透视开关的RCP应用程序中隐藏一些编辑器。我扩展了“PerspectiveAdapter”类,并尝试在重写的方法“PerspectiveActivated”中使用IWorkBenchPage.HideEditor(editorReference)隐藏编辑器。这件事我没能成功。后来当我检查eclipse源代码中的hideEditor实现时,只有一行代码“e4util.unsupport
问题内容: 我正在制定一个仅具有一些基本功能的在线图像编辑器的计划。它(显然)应包含一个画布工作区并支持以下功能: 1.从计算机上载图像或提交链接 2.调整图像大小(通过拖动角) 3.旋转和翻转 4.拖动/移动/平移 5.分层(如果在画布上有一个以上的图像,请选择垂直顺序) 6. 并且非常重要: 它应该能够使用简单的边缘检测进行某种背景删除。 我使用的图像将主要是时尚商品,因此,如果背景不是白色,
介绍 针对awt中图片处理进行封装,这些封装包括:缩放、裁剪、转为黑白、加水印等操作。 方法介绍 图像切割 // 将face.jpg切割为原型保存为face_radis.png Img.from(FileUtil.file("e:/pic/face.jpg")) .cut(0, 0, 200)// .write(FileUtil.file("e:/pic/face_radis.pn
出于某种原因,我的图像图标正在出现错误,尽管我试图修复它... 我读过这个问题,答案建议在mitmap文件夹中创建图像图标。因此,我将代码行从更改为 您可以看到图像上有一个错误。为什么会这样? 我曾试图: 清洁项目 重建项目 确保@mitmap/ic_启动器确实存在: 即使在我所有的尝试之后,错误仍然存在。我已经被困在这个问题上好几个小时了,我的脑袋都转不过来了。这是我的代码还是android s
问题内容: 我正在使用来自sketch.js(http://intridea.github.io/sketch.js/)中的示例来绘制草图并将其保存为图像文件。 问题是我能够渲染后如何继续编辑草图图像? 任何建议或解决方案表示赞赏。 谢谢 问题答案:
问题内容: 我想提供一个WYSIWYG工具,最好是基于JavaScript的工作流图表(即有向图)。我需要商业软件友好许可,其中包括向OEM付费。如果有必要的服务器端组件,则需要Java或ColdFusion,因为我正在与现有产品集成。 我的工作流图可以有多个起始顶点,但是只有一个终止顶点和边是有向的。除了所见即所得的编辑之外,我还在寻找一种可以帮助以下方面的工具: 能够导出工程图,因此可以是: