Source code

Revision control

Copy as Markdown

Other Tools

<!DOCTYPE html>
<style type="text/css">
canvas {
margin: 5px;
}
</style>
<body>
<svg width="0" height="0">
<filter color-interpolation-filters='sRGB' id="justKernel">
<feConvolveMatrix
kernelMatrix="3 0 0 0 0 0 0 0 -3"/>
</filter>
<filter color-interpolation-filters='sRGB' id="preserveAlpha">
<feConvolveMatrix
kernelMatrix="3 0 0 0 0 0 0 0 -3"
preserveAlpha="true"/>
</filter>
<filter color-interpolation-filters='sRGB' id="target">
<feConvolveMatrix
kernelMatrix="3 0 0 0 0 0 0 0 -3"
targetX="2" targetY="2"/>
</filter>
<filter color-interpolation-filters='sRGB' id="divisor">
<feConvolveMatrix
kernelMatrix="3 0 0 0 0 0 0 0 -3"
divisor="3"/>
</filter>
<filter color-interpolation-filters='sRGB' id="bias">
<feConvolveMatrix
kernelMatrix="3 0 0 0 0 0 0 0 -3"
bias="0.5"/>
</filter>
<filter color-interpolation-filters='sRGB' id="edgeMode">
<feConvolveMatrix
kernelMatrix="3 0 0 0 0 0 0 0 -3"
edgeMode="wrap"/>
</filter>
</svg>
</body>
<script type="text/javascript">
const filters = [
"url('#justKernel')",
"url('#preserveAlpha')",
"url('#target')",
"url('#divisor')",
"url('#bias')",
"url('#edgeMode')",
];
function draw(ctx) {
ctx.fillRect(0, 20, 120, 100);
ctx.beginPath();
ctx.arc(150, 70, 50, 0, 2*Math.PI);
ctx.fill();
ctx.beginPath();
ctx.moveTo(220, 20);
ctx.lineTo(170, 120);
ctx.lineTo(270, 120);
ctx.lineTo(220, 20);
ctx.fill();
}
for (f of filters) {
const canvas = document.createElement("canvas");
document.body.prepend(canvas);
const ctx = canvas.getContext("2d");
ctx.filter = "blur(0px)";
ctx.fillStyle = "rgba(0,255,0,0.5)";
draw(ctx);
ctx.fillStyle = "rgba(255,0,255,0.5)";
ctx.filter = f;
draw(ctx);
}
</script>