【发布时间】:2018-10-04 07:08:59
【问题描述】:
我在我的项目中使用 lanczos 过滤器来制作高质量的图像。特别适用于画布上的上传图像。
我已经使用了 Fabric.js 演示 · Realtime lanczos http://fabricjs.com/lanczos-webgl 它对我有用。
但它不适用于两张或更多张图片。
当我在画布上添加两个或更多图像并放大一个图像时。工作正常。但是我放大了另一个图像,然后第一个图像变得模糊或不正确可见。当我缩放图像时它会影响其他图像。
请针对上述情况提出一些解决方案。
下面是我的脚本:
jQuery('#cust_image').change(function(e) {
var file = e.target.files[0]; //alert(JSON.stringify(e.target.files[0]));
var reader = new FileReader();
var r = canvas.getRetinaScaling();
reader.onload = function(f) {
var data = f.target.result;
console.log(data);
fabric.Image.fromURL(data, function(cimg) {
var oImg = cimg.set({
left: 0,
top: 0,
angle: 00,
centeredScaling: true,
hasRotatingPoint: false
}).scale(0.3);
lanczosFilter.scaleX = lanczosFilter.scaleY = oImg.scaleX * r;
oImg.lockScalingFlip = true;
oImg.minScaleLimit = 0.025;
oImg.padding = 5;
oImg.filters = [lanczosFilter];
//oImg.hoverCursor = 'crossHair';
oImg.on('scaling', function(opt) {
var filters = [];
var sX = Math.abs(this.scaleX) * r, sY = Math.abs(this.scaleY) * r;
if (sX > 0.01 && sY > 0.01 && sX < 1 && sY < 1) {
if (sX <= 0.2 || sY <= 0.2) {
lanczosFilter.lanczosLobes = 2;
} else if (sX <= 0.05 || sY <= 0.05) {
lanczosFilter.lanczosLobes = 1;
} else {
lanczosFilter.lanczosLobes = 3;
}
lanczosFilter.scaleX = sX;
lanczosFilter.scaleY = sY;
filters.push(lanczosFilter);
}
this.filters = filters;
});
canvas.add(oImg).renderAll();
var a = canvas.setActiveObject(oImg);
canvas.on('before:render', function() {
oImg.applyFilters();
});
var dataURL = canvas.toDataURL({
format: 'png',
quality: 0.8
});
});
};
reader.readAsDataURL(file);
});
检查屏幕截图是否有问题。在此图像中,龙龙图像看起来很好且清晰。但口袋妖怪图像看起来不太好并且图像模糊。
检查这个小提琴https://jsfiddle.net/AppleDev/xpvt214o/179163/
提前致谢
【问题讨论】:
-
你能在这里做一个sn-p,嵌入并显示问题吗?从这段代码中不容易理解你要做什么。
-
好的。我会创建 sn-p 并更新你。
-
您好 AndreaBogazzi,请查看上面的问题截图。我加了小提琴
https://jsfiddle.net/AppleDev/xpvt214o/179163/
标签: jquery fabricjs imagefilter