gpt4 book ai didi

javascript - 将剪贴板中的图像粘贴到fabric.js Canvas 上?

转载 作者:行者123 更新时间:2023-11-28 03:49:43 27 4
gpt4 key购买 nike

我正在尝试创建一个函数,将用户剪贴板中的图像作为 new Fabric.Image() 粘贴到 Canvas 上。我发现的任何搜索结果都描述了 Canvas 上已有的克隆对象或粘贴 IText 数据。这个SO问题与我要问的内容相关,但它已经有4年历史了,并且顶部答案中的功能不起作用:

How to do Copy and paste the image from User system to Canvas using fabric.js

这是我当前正在尝试使用的代码。我正在尝试设置一个稍后可以调用的粘贴函数:

var $wrapper = $('#content'), 
canvas = new fabric.Canvas('canvas', {
width: 400,
height: 550
}),
pasteImage = function (e) {
var items=e.originalEvent.clipboardData.items;

e.preventDefault();
e.stopPropagation();

// Fabric.js image function
function canvasImage(url) {
var img = new fabric.Image(url);
img.scale(0.75).center().setCoords();
canvas.add(img).renderAll();
}

//Loop through files
for(var i=0;i<items.length;i++){
var file = items.items[i],
type = file.type;

if (type.indexOf("image")!=-1) {
var imageData = file.getAsFile();
var imageURL=window.webkitURL.createObjectURL(imageData);
canvasImage(imageURL);
}
}
};
$wrapper.on('paste', pasteImage);

Here's a fiddle看到它在行动(或不行动,我猜)。这最终将成为 Photoshop 插件的一部分,所以幸运的是我只需要担心它在 Chrome 中的工作情况。

最佳答案

我无法触发您的粘贴事件处理程序,因为我不确定 div 是否可以 native 获取过去的事件,除非您将其设为可内容编辑的 div,在您的用例中我怀疑您想要这样做。

我最近刚刚在自己的应用程序中实现了这个,但我没有使用 Fabric,只是使用原生 Canvas 和 js。

您将不得不重新编写代码,但请尝试更改

$wrapper.on('paste', pasteImage);

$(window).on('paste', pasteImage);

无论如何,我修改了您当前的代码,这就是我要做的工作,尽管它可能不会完全触发您的设置,但它将图像粘贴到:

(function() {
var $wrapper = $('#content'),
canvas = new fabric.Canvas('canvas', {
width: 400,
height: 550
}),
txtStyles = {
top: 100,
left: 200,
padding: 6,
fill: '#d6d6d6',
fontFamily: 'sans-serif',
fontSize: '24',
originY: 'center',
originX: 'center',
borderColor: '#d6d6d6',
cornerColor: '#d6d6d6',
cornerSize: 5,
cornerStyle: 'circle',
transparentCorners: false,
lockUniScaling: true
},
imgAttrs = {
left: 200,
top: 200,
originY: 'center',
originX: 'center',
borderColor: '#d6d6d6',
cornerColor: '#d6d6d6',
cornerSize: 5,
cornerStyle: 'circle',
transparentCorners: false,
lockUniScaling: true
},
introTxt = new fabric.Text('Paste images here', txtStyles),
pasteImage = function (e) {
var items=e.originalEvent.clipboardData.items;

e.preventDefault();
e.stopPropagation();

//Loop through files
for(var i=0;i<items.length;i++){
if (items[i].type.indexOf('image')== -1) continue;
var file = items[i],
type = items[i].type;
var imageData = file.getAsFile();
var URLobj = window.URL || window.webkitURL;
var img = new Image();
img.src = URLobj.createObjectURL(imageData);
fabric.Image.fromURL(img.src, function(img){
canvas.add(img);
});
}
},

//Canvas starter text
introCanvas = function() {
canvas.add(introTxt);
};

introCanvas();
$(window).on('paste', pasteImage);
})();

fiddler :https://jsfiddle.net/c0kw5dbu/3/

关于javascript - 将剪贴板中的图像粘贴到fabric.js Canvas 上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48108696/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com