css滤镜图片的原样生成

需求:

有个复杂滤镜,已经对图片做了很复杂的操作了,现在又要在这个图片上绘制新的内容,且不被这个复杂滤镜影响。(同时因为框架限制,只能在这个img上绘制)

奇怪需求+1,猜猜为啥这么奇怪?

思考:

1、既然不想影响新的内容,那么只能拆分开来绘制?
可是如果直接在页面上拆分,逻辑太复杂,效率也太低
2、那么索性直接彻底拆开?
干脆对复杂滤镜的图片进行保存,使这个图片能保留滤镜的效果。然后重新引入这个图片~
还好这个图片确实不会变,都是资源库的,说干就干!

解决方案:

原理很简单,就是在原来image的基础上,新建一个canvas,然后增加滤镜效果,画出这个图片,最后保存这个图片到本地。

js代码简单版本(未实现批量)

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Apply Filter to Image</title>
</head>
<body>
    <img id="originalImage" src="image_path.jpg" alt="Original Image">
    <canvas id="canvas" style="display: none;"></canvas>

    <script>
        const originalImage = document.getElementById('originalImage');
        const canvas = document.getElementById('canvas');
        const ctx = canvas.getContext('2d');

        originalImage.onload = function() {
            canvas.width = originalImage.width;
            canvas.height = originalImage.height;

            ctx.filter = 'brightness(0.9) contrast(1.3) grayscale(1) hue-rotate(140deg) opacity(1) saturate(1) sepia(1) invert(1)';
            ctx.drawImage(originalImage, 0, 0);

            const filteredImageUrl = canvas.toDataURL('image/png');

            // 创建一个新的图片元素来显示处理后的图片
            const filteredImage = new Image();
            filteredImage.src = filteredImageUrl;

            // 将处理后的图片添加到页面中
            document.body.appendChild(filteredImage);
        };

        originalImage.src = "image_path.jpg";
    </script>
</body>
</html>
posted @ 2024-03-08 15:46  idealy233  阅读(12)  评论(0编辑  收藏  举报