Javascript - 将过滤器应用于画布并重置为原始
Javascript - apply filters to canvas and reset to original
我在页面上有一个画布,我在里面画了一个图像,现在我想应用亮度、对比度、棕褐色等滤镜......
当用户选择筛选器时出现问题,因为用户需要能够选择和取消选择筛选器。
因此,例如,如果用户选择棕褐色和对比度滤镜,我会将这两个滤镜应用于画布,但如果他取消选择棕褐色,我需要从画布中删除棕褐色滤镜(种类重置滤镜并仅应用对比度)...依此类推,以此类推,用于所有可用的过滤器。
我怎样才能做到这一点?
有没有一些简单的方法?
我目前尝试的非常糟糕:
function applyFilter(filter) {
var canvas = document.getElementById('canvas')
, context = canvas.getContext('2d');
if (filter === 'sepia') {
context.sepia(1);
}
if (filter === 'contrast') {
context.contrast(1.3);
}
}
function removeFilter(filter) {
var canvas = document.getElementById('canvas')
, context = canvas.getContext('2d');
if (filter === 'sepia') {
context.sepia(0);
}
if (filter === 'contrast') {
context.contrast(1);
}
}
您可以使用"none"属性
无:不应用过滤器。初始值。
const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');
const image = document.getElementById('source');
ctx.filter = 'contrast(1.4)';
ctx.drawImage(image, 10, 10, 180, 120);
ctx.filter = 'none';
https://developer.mozilla.org/fr/docs/Web/API/CanvasRenderingContext2D/filter
您可以将画布克隆到隐藏缓冲区并拥有 2 个版本的画布,然后在删除过滤器时使用缓冲区重置?
http://jsfiddle.net/grzuo9he/
var canvas = document.getElementById('canvas'),
buffer = document.getElementById('buffer'),
context = canvas.getContext("2d"),
bufferContext = buffer.getContext("2d"),
activeFilters = [];
context.moveTo(20, 20);
context.lineTo(100, 20);
context.fillStyle = "#999";
context.beginPath();
context.arc(100,100,75,0,2*Math.PI);
context.fill();
//Make buffer a clone of canvas
bufferContext.drawImage(canvas, 0, 0);
function applyFilter(filter) {
if(filter){
activeFilters.push(filter);
}
if (activeFilters.indexOf('sepia') > -1) {
context.sepia(1);
}
if (activeFilters.indexOf('contrast') > -1) {
context.contrast(1.3);
}
}
function removeFilter(filter) {
//Reset the canvas
context.drawImage(buffer, 0, 0);
//Remove this filter froma active filters
activeFilters.splice(activeFilters.indexOf(filter), 1);
applyFilter(false);
}
相关文章:
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 为什么我的d3.jsselectAll+过滤器没有过滤
- 使用jQuery从原始页面内容创建iframe
- Angularjs-utils高亮过滤器在搜索时破坏应用程序
- 从客户端获取修改后的对象,并将其与服务器上的原始对象组合
- Angular-表的多列过滤器
- 如何“;过滤器”;或者以其他方式重构该数据
- 我如何制作一个JS函数,它可以从相似的原始颜色双向更改为某个颜色
- Angularjs通过过滤器获取indexOf
- ui网格日期单元格过滤器,过滤日期格式导致显示错误的日期
- 使用按钮的Angular UI网格过滤器
- KendoUI网格行过滤器,带有布尔值下拉列表
- 如何在angular.js中动态应用自定义过滤器
- 查找仅适用于原始图像的图像放大算法的名称
- 如何在使用Javascript浏览网站时处理原始窗口
- markrwithlabel.js(第三方)原始文件链接断开
- 在Javascript中重新分配对象变量时,原始对象会发生什么
- 将IIFE的原始值存储在Angular中的监视功能(重置过滤器)中
- Javascript - 将过滤器应用于画布并重置为原始
- 在原始图像上应用camanJS过滤器