javascript - 调整画布大小时,图像上的过滤器会丢失
问题描述
我一直在尝试在画布中加载的图像上放置过滤器(如亮度、对比度)。下面是我正在做的一个片段
/******Loading Image in Canvas******/
let canvas = document.getElementById('demo');
let ctx = canvas.getContext('2d');
var reader = new FileReader();
reader.onload = function(event){
var img = new Image();
img.onload = function(){
canvas.width = 220;
canvas.height = 250;
ctx.drawImage(img,0,0,canvas.width,canvas.height);
}
img.src = event.target.result;
self.oldImg = event.target.result;
}
reader.readAsDataURL(xevents.target.files[0]);
我添加了亮度、对比度逻辑并且在图像上工作正常。当我对图像进行任何操作时,例如调整画布大小(使用可调整大小的 jquery UI),问题实际上会出现。应用的过滤器会丢失。下面是调整大小时在画布上重绘的片段。
$(".stretch").resizable({ resize: function(event, ui) {
$("#demo", this).each(function() {
$(this).attr({ width: ui.size.width, height: ui.size.height });
self.reDraw(this);
});
} });
reDraw () {
var img = new Image();
var canvas = document.getElementById('demo');
var c = canvas.getContext("2d");
img.src = this.oldImg;
c.drawImage(img, 0, 0, canvas.width, canvas.height);
}
我相信,因为它再次创建了一个新的图像对象(new Image()),所以过滤器会丢失。谁可以帮我这个事。我希望在调整画布大小时保留过滤器。
赞赏!谢谢
更新
process (type, amount) {
var img = new Image();
var canvas = document.getElementById('demo');
var c = canvas.getContext("2d");
img.src = this.oldImg;
c.drawImage(img, 0, 0, canvas.width, canvas.height);
let imgData = c.getImageData(0, 0, canvas.width, canvas.height);
let data = imgData.data;
if(type === 'b') {
for (let i = 0; i < data.length; i += 4) {
data[i] += amount;
data[i + 1] += amount;
data[i + 2] += amount;
}
}
if(type === 'c') {
amount = (amount/100) + 1; //convert to decimal & shift range: [0..2]
let intercept = 128 * (1 - amount);
for(let i=0;i<data.length;i+=4){ //r,g,b,a
data[i] = data[i]*amount + intercept;
data[i+1] = data[i+1]*amount + intercept;
data[i+2] = data[i+2]*amount + intercept;
}
}
c.putImageData(imgData, 0, 0);
}
解决方案
推荐阅读
- haskell - Haskell read function with no annotation
- javascript - 为什么可拖动功能在电脑上不工作,而在手机上工作?
- javascript - LinkedIn应用按钮脚本中的语言参数
- javascript - 如何在 React Native 中使用 VirtualizedList 将列表项显示为网格?
- angular - 在 Angular-ngrx 应用程序中,页面刷新后图标会改变颜色,而不仅仅是点击后
- vba - 尝试使用匹配多个条件,根据多个条件设置一行
- python - scipy层次聚类合适的联动方法
- spring - Spring boot 2.5.0 生成的 *jar 和 *-plain.jar 的区别?
- python - Python:在最后一行显示语法错误。为什么?
- spring-boot - 像属性一样读取 YAML 文件