RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1308460
Accepted
Leonid
Leonid
Asked:2022-07-24 20:16:37 +0000 UTC2022-07-24 20:16:37 +0000 UTC 2022-07-24 20:16:37 +0000 UTC

如何为 SVG 过滤器获得的路径添加清晰度。SVG 滤镜后不添加对比度(200%)

  • 772

我正在尝试使用一系列过滤器获取图像的轮廓SVG。在片段上,您可以切换图像并打开/关闭过滤器覆盖。

let img_sources = [
    "https://image.freepik.com/free-vector/flat-car-poster-with-photo-horizontal_52683-64510.jpg",
    "https://cdn.sstatic.net/Img/teams/teams-illo-free-sidebar-promo.svg?v=47faa659a05e",
    "https://image.freepik.com/free-vector/enjoy-summer-3d-realistic-background-with-clouds-daisies-grass-leaves-product-podium_87521-3206.jpg",
    "https://image.freepik.com/free-vector/linear-flat-wedding-monograms_52683-64319.jpg",
    "https://image.freepik.com/free-vector/gradient-grainy-gradient-shapes_23-2148975080.jpg",
    "https://image.freepik.com/free-photo/metallic-gold-green-leaves-textured-background_53876-101336.jpg",
    "https://image.freepik.com/free-psd/friends-representing-inclusion-concept-with-mock-up-t-shirts_23-2148997994.jpg",
    "https://image.freepik.com/free-psd/3d-space-rocket-with-smoke_23-2148938939.jpg"
];

let image = document.querySelector('image');
let container = document.getElementById('inputContainer');

let input_range = document.createElement('input');
let range_label = document.createElement('label');
range_label.textContent = 'ИЗОБРАЖЕНИЯ';
range_label.style.marginRight = '20px';
input_range.type = 'range';
input_range.min = 0;
input_range.max = img_sources.length - 1;
input_range.value = 0;
input_range.addEventListener('change', e => {
    draw(e.target.value);
})
container.append(input_range);
container.append(range_label);

draw();

let input_checkbox = document.createElement('input');
let checkbox_label = document.createElement('label');
input_checkbox.checked = true;
checkbox_label.textContent = 'ФИЛЬТР';
input_checkbox.type = 'checkbox';
input_checkbox.addEventListener('change', e => {
    image.setAttribute('style', e.target.checked ? "filter: url(#filter)" : "");
});
container.append(input_checkbox);
container.append(checkbox_label);

function draw(val=0){
    image.setAttribute('href', img_sources[val]);
}
<svg viewbox="0 0 400 200">
    <filter id="filter" x="-20%" y="-20%" width="140%" height="140%" filterUnits="objectBoundingBox" primitiveUnits="userSpaceOnUse" color-interpolation-filters="linearRGB">
        <feMorphology operator="dilate" radius="0.5 0.5" x="0%" y="0%" width="100%" height="100%" in="SourceGraphic" result="morphology"/>
        <feBlend mode="difference" x="0%" y="0%" width="100%" height="100%" in="SourceGraphic" in2="morphology" result="blend"/>
        <feColorMatrix type="luminanceToAlpha" x="0%" y="0%" width="100%" height="100%" in="blend" result="colormatrix3"/>
    </filter>
    <image id="filtered" href="" height="200" width="200" style="filter: url(#filter)"/>
</svg>
<div id="inputContainer" style="position: fixed; top: 4px; left: 4px"></div>

但是在接收到不同程度强度的轮廓后,我无法得到轮廓“暗度”的均匀性,也无法通过增加对比度来表现出来。我尝试将contrast(200%)过滤器添加到链中,但它根本没有任何效果。

理想情况下,增加对比度后,将生成的图像放在黑色背景上,并使用蒙版或其他工具提取清晰的黑线。如何才能做到这一点?

javascript
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    UModeL
    2022-07-24T20:58:48Z2022-07-24T20:58:48Z

    如果 CSS 过滤器没有可见的效果,那为什么不使用<feBlend mode="multiply">呢?

    let img_sources = [
        "https://image.freepik.com/free-vector/flat-car-poster-with-photo-horizontal_52683-64510.jpg",
        "https://image.freepik.com/free-vector/enjoy-summer-3d-realistic-background-with-clouds-daisies-grass-leaves-product-podium_87521-3206.jpg",
        "https://image.freepik.com/free-vector/linear-flat-wedding-monograms_52683-64319.jpg",
        "https://image.freepik.com/free-vector/gradient-grainy-gradient-shapes_23-2148975080.jpg",
        "https://image.freepik.com/free-vector/gradient-grainy-gradient-texture_23-2148974472.jpg",
        "https://image.freepik.com/free-vector/gradient-grainy-gradient-shape-set_23-2148971570.jpg",
        "https://image.freepik.com/free-psd/3d-space-rocket-with-smoke_23-2148938939.jpg"
    ];
    
    let image = document.querySelector('image');
    let container = document.getElementById('inputContainer');
    
    let input_range = document.createElement('input');
    let range_label = document.createElement('label');
    range_label.textContent = 'ИЗОБРАЖЕНИЯ';
    range_label.style.marginRight = '20px';
    input_range.type = 'range';
    input_range.min = 0;
    input_range.max = img_sources.length - 1;
    input_range.value = 0;
    input_range.addEventListener('change', e => {
        draw(e.target.value);
    })
    container.append(input_range);
    container.append(range_label);
    
    draw();
    
    let input_checkbox = document.createElement('input');
    let checkbox_label = document.createElement('label');
    input_checkbox.checked = true;
    checkbox_label.textContent = 'ФИЛЬТР';
    input_checkbox.type = 'checkbox';
    input_checkbox.addEventListener('change', e => {
        image.setAttribute('style', e.target.checked ? "filter: url(#filter)" : "");
    });
    container.append(input_checkbox);
    container.append(checkbox_label);
    
    function draw(val=0){
        image.setAttribute('href', img_sources[val]);
    }
    <svg viewbox="0 0 400 200">
        <filter id="filter" x="-20%" y="-20%" width="140%" height="140%" filterUnits="objectBoundingBox" primitiveUnits="userSpaceOnUse" color-interpolation-filters="linearRGB">
            <feMorphology operator="dilate" radius="0.5 0.5" x="0%" y="0%" width="100%" height="100%" in="SourceGraphic" result="morphology"/>
            <feBlend mode="difference" x="0%" y="0%" width="100%" height="100%" in="SourceGraphic" in2="morphology" result="blend"/>
            <feColorMatrix type="luminanceToAlpha" x="0%" y="0%" width="100%" height="100%" in="blend" result="colormatrix3"/>
            
            <feBlend mode="multiply" in="colormatrix3" result="multi1"/>
            <feBlend mode="multiply" in="multi1" result="multi2"/>
            <feBlend mode="multiply" in="multi2" result="multi3"/>
            <feBlend mode="multiply" in="multi3" result="multi4"/>
        </filter>
        <image id="filtered" href="" height="200" width="200" style="filter: url(#filter)"/>
    </svg>
    <div id="inputContainer" style="position: fixed; top: 4px; left: 4px"></div>

    • 2

相关问题

  • 第二个 Instagram 按钮的 CSS 属性

  • 由于模糊,内容不可见

  • 弹出队列。消息显示不正确

  • 是否可以在 for 循环中插入提示?

  • 如何将 JSON 请求中的信息输出到数据表 Vuetify vue.js?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    表格填充不起作用

    • 2 个回答
  • Marko Smith

    提示 50/50,有两个,其中一个是正确的

    • 1 个回答
  • Marko Smith

    在 PyQt5 中停止进程

    • 1 个回答
  • Marko Smith

    我的脚本不工作

    • 1 个回答
  • Marko Smith

    在文本文件中写入和读取列表

    • 2 个回答
  • Marko Smith

    如何像屏幕截图中那样并排排列这些块?

    • 1 个回答
  • Marko Smith

    确定文本文件中每一行的字符数

    • 2 个回答
  • Marko Smith

    将接口对象传递给 JAVA 构造函数

    • 1 个回答
  • Marko Smith

    正确更新数据库中的数据

    • 1 个回答
  • Marko Smith

    Python解析不是css

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5