Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
聊聊如何利用 SVG 实现图片马赛克效果_创想鸟

聊聊如何利用 SVG 实现图片马赛克效果

不借助 javascript,如何利用 svg 实现图片马赛克效果?下面本篇文章就来带大家详细了解一下,希望对大家有所帮助!

聊聊如何利用 SVG 实现图片马赛克效果

之前在公众号转发了好友 Vajoy 的一篇文章 — 巧用 CSS 把图片马赛克风格化。

核心是利用了 CSS 中一个很有意思的属性 — image-rendering,它可以用于设置图像缩放算法。【推荐学习:css视频教程】

何为 image-rendering?

CSS 属性 image-rendering 用于设置图像缩放算法。它适用于元素本身,适用于元素其他属性中的图像,也应用于子元素。

语法比较简单:

{    image-rendering: auto;              // 默认值,使用双线性(bilinear)算法进行重新采样(高质量)    image-rendering: smooth;         // 使用能最大化图像客观观感的算法来缩放图像。让照片更“平滑”    image-rendering: crisp-edges;  // 使用可有效保留对比度和图像中的边缘的算法来对图像进行缩放    image-rendering: pixelated;      // 放大图像时, 使用最近邻居算法,因此,图像看着像是由大块像素组成的}

其中,image-rendering: pixelated 比较有意思,可以将一张低精度图像马赛克化。

譬如,假设我们有一张 300px x 300px 的图像,我们让他转换成 30px x 30px:

聊聊如何利用 SVG 实现图片马赛克效果

我们再把失真后的图片,放大到 300px x 300px:

聊聊如何利用 SVG 实现图片马赛克效果

在此基础上,我们给这张图片设置 image-rendering: pixelated,就能得到一张被马赛克化图片:

@@##@@
img {    width: 300px;    height: 300px;    image-rendering: pixelated}

聊聊如何利用 SVG 实现图片马赛克效果

image-rendering: pixelated 实现马赛克效果的局限性

OK,那么为什么需要先缩小再放大,然后才运用 image-rendering: pixelated 呢?我们来做个对比,直接给原图设置 image-rendering: pixelated:

聊聊如何利用 SVG 实现图片马赛克效果

直接给原图设置 image-rendering: pixelated 只会让图片变得更加有锯齿感,而不会直接产生马赛克的效果。

这也和 image-rendering: pixelated 的描述吻合,放大图像时, 使用最近邻居算法,因此,图像看着像是由大块像素组成的。

我们只有基于放大模糊后的图像,才能利用 image-rendering: pixelated 得到一张被马赛克的图片!

利用 CSS 再图片缩小后再放大?

那么,假设我们只有一张清晰的原图,又想利用 CSS 得到一个马赛克效果,可行么?顺着这个思路,我们可以想到:

能否利用 CSS 将图片缩小后再放大,再运用 image-rendering: pixelated 呢?

不行。WEB 上的图片像极了 Photoshop 里的智能对象 —— 你可以任意修改它的尺寸(例如放大很多倍让其变模糊),但最后再把图片改回原本的大小时,图片会变回原来的样子(没有任何失真)。

所以,要想在只有一张原图的情况下,得到一张模糊的图像,就不得不求助于 Canvas,这样一来就稍显麻烦了。我们只是想要个马赛克效果而已。

SVG 滤镜叠加实现马赛克效果

这就可以引出今天的主角了,SVG 滤镜,使用几层 SVG 滤镜的叠加,其实可以非常轻松的实现一个马赛克效果滤镜。

并且,SVG 滤镜可以通过 CSS filter,轻松的引入。

代码其实也非常的简单,SVG 定义一个滤镜,利用多层滤镜的叠加效果实现一个马赛克效果,然后,通过 CSS filter 引入,可以运用在任何元素上:

@@##@@                        
img {    width: 300px;    height: 300px;    filter: url(#pixelate);}

这样,我们就得到了一个马赛克效果:

聊聊如何利用 SVG 实现图片马赛克效果

如果你只是想使用这个效果,你甚至不需要去理解整个 SVG 到底做了什么事情,当然,如果你是一个一问到底的人,那么需要有一定的 SVG 基础,建议可以看看我的这几篇关于 SVG 滤镜的介绍:

有意思!强大的 SVG 滤镜有意思!不规则边框的生成方案震惊!巧用 SVG 滤镜还能制作表情包?

CSS/SVG 实现马赛克的局限性

当然,CSS/SVG 滤镜实现马赛克的局限性在于,如果你是不想给用户看到原图的,那么在客户端直接使用这个方式相当于直接把原图的暴露了。

因为 CSS/SVG 滤镜的方式是在前端进行图片马赛克化的,而且需要原图。

当然,利用上述的两个实现图片马赛克技巧,我们还是可以用于制作一些简单的交互效果的,像是这样:

聊聊如何利用 SVG 实现图片马赛克效果

上述的 DEMO 和 SVG 滤镜的全部代码,你都可以在这两个 DEMO 中找到:

CodePen Demo – image-rendering  pixelated applicationSVG Pixel Filter

原文地址:https://www.cnblogs.com/coco1s/p/16134088.html作者:ChokCoco

(学习视频分享:web前端)

聊聊如何利用 SVG 实现图片马赛克效果聊聊如何利用 SVG 实现图片马赛克效果

以上就是聊聊如何利用 SVG 实现图片马赛克效果的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1624580.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
巧用CSS实现鼠标跟随 3D 旋转效果,让交互更加生动!
上一篇 2025年12月24日 08:32:58
css如何排除第一个子元素
下一篇 2025年12月24日 08:33:21

相关推荐

  • 系统界面美化的10个方法

    采用一致色彩方案,使用协调主色调并保持元素颜色统一;2. 选用清晰字体如思源黑体,规范字号层级;3. 增加留白提升视觉舒适度;4. 统一图标风格并使用SVG格式;5. 添加微动效增强交互引导;6. 采用卡片式布局与栅格系统;7. 支持深浅色模式切换并优化对比度;8. 精简装饰元素突出核心功能;9. …

    2026年9月21日
    200
  • 如何利用Draw.io Integration扩展在VSCode中绘制并嵌入架构图?

    安装Draw.io Integration扩展后,可在VSCode中直接创建编辑图表。右键选择“Create Diagram with Draw.io”新建.diagram文件,双击打开内置编辑器,拖拽组件绘制流程图、架构图等。保存后自动生成Base64编码的嵌入代码,粘贴至Markdown即可预览…

    2026年9月21日
    200
  • Laravel资源控制器?RESTful控制器如何使用?

    Laravel资源控制器通过Route::resource定义RESTful路由,自动生成七种CRUD操作方法,支持only/except筛选,可自定义URI、注入服务、使用中间件及返回JSON响应。 Laravel资源控制器,简单来说,就是为了更方便地处理CRUD(创建、读取、更新、删除)操作而生…

    2026年9月10日
    100
  • 深入理解VSCode Drawio图表集成与编辑

    VSCode中集成Drawio扩展可高效创建图表,安装“Drawio Integration”后支持新建.drawio或.drawio.svg文件,前者适用于Git版本控制,后者可在Markdown中直接渲染;编辑器提供拖拽操作、多页面管理及完整功能面板,并可与PlantUML、CI/CD等工具协同…

    2026年9月9日
    200
  • VSCode文件系统提供者实现

    答案:通过实现FileSystemProvider接口,可在VSCode中创建自定义文件系统扩展,支持虚拟或远程资源访问。首先在package.json中声明协议和权限,激活时注册提供者并实现readDirectory、stat、readFile、writeFile等核心方法,处理异步操作与错误。使…

    2026年9月8日
    200
  • 解决 Bootstrap 4.4 Navbar 折叠图标不显示问题:完整指南

    本教程旨在解决 Bootstrap 4.4 导航栏在移动端折叠时,汉堡包图标不显示但功能正常的常见问题。核心原因通常是 Bootstrap CSS 或 JavaScript 依赖(如 jQuery, Popper.js)的 CDN 引入不完整或不正确。文章将提供一个完整的、可运行的 HTML 模板,…

    2026年9月5日
    100
  • AI生成插画怎么操作_Illustroke文本生成矢量插画方法

    AI生成插画怎么操作_Illustroke文本生成矢量插画方法AI生成插画怎么操作_Illustroke文本生成矢量插画方法AI生成插画怎么操作_Illustroke文本生成矢量插画方法AI生成插画怎么操作_Illustroke文本生成矢量插画方法

    AI生成矢量插画的核心在于通过精准的文本提示词(Prompt)引导如Illustroke等工具,结合其对设计风格、构图与色彩的理解,快速生成可编辑、可缩放的SVG格式图形。整个流程包括:访问Illustroke平台,输入具体且富有描述性的提示词,生成多张草图后进行筛选与迭代优化。高质量提示词需明确主…

    2026年8月30日 • 用户投稿
    200
  • C# 进程间通讯

    一、进程间通信的方式 1)共享内存 包括:内存映射文件、共享内存DLL、剪切板。 2)命名管道和匿名管道 3)消息通信 4)利用代理方法,例如SOCKET、配置文件、注册表方式等。 方法一:通信。 进程间通信的方式多种多样,常用的有共享内存(如内存映射文件、共享内存DLL、剪切板等)、命名管道和匿名…

    2026年8月28日
    200
  • 自动化密码查询工具Cypheroth

    Cypheroth介绍 Cypheroth是一款自动化且可扩展的工具套件,旨在帮助研究人员对Bloodhound的Neo4j后端进行自动化密码查询,并将查询结果存储到电子表格中。 Cypheroth是一款Bash脚本,能够自动对Neo4j数据库中存储的Bloodhound数据执行密码查询。 密码查询…

    2026年8月25日
    100
  • 详解用SVG给 favicon 添加标识

    详解用SVG给 favicon 添加标识详解用SVG给 favicon 添加标识详解用SVG给 favicon 添加标识详解用SVG给 favicon 添加标识

    怎么使用svg给 favicon 添加标识?下面本篇文章给大家介绍一下使用 svg 生成带标识的 favicon的方法,希望对大家有所帮助! 之前做了一个 Chrome 插件,可以根据地址的不同生成不同的图标,这样可以很方便的区分不同的开发环境,效果如下 主要实现过程其实不复杂,首先获取网站 fav…

    2025年12月24日 • 用户投稿
    100
  • 给文字添加渐变、描边、投影效果的两种方式(CSS和SVG)

    给文字添加渐变、描边、投影效果的两种方式(CSS和SVG)给文字添加渐变、描边、投影效果的两种方式(CSS和SVG)给文字添加渐变、描边、投影效果的两种方式(CSS和SVG)给文字添加渐变、描边、投影效果的两种方式(CSS和SVG)

    本篇文章给大家介绍一下使用css和svg给文字添加渐变、描边、投影效果的方法,希望对大家有所帮助! 在一些 web 活动页中经常能看到特殊处理的标题文字,比如这样的 暂时忽略掉特殊字体,通过设计稿的图层样式可以发现,共有 3 个文字特效,分别是渐变、描边、投影 立即学习“前端免费学习笔记(深入)”;…

    2025年12月24日 • 用户投稿
    000
  • css怎么显示svg图片

    显示方法:1、使用embed标签,语法“”;2、使用object标签,语法“”;3、使用iframe标签,语法“”。 本教程操作环境:windows7系统、CSS3&&HTML5版、Dell G3电脑。 SVG 文件可通过以下标签嵌入 HTML 文档,显示出来:、或者 详解: 1、使…

    2025年12月24日
    500
  • css如何改变svg颜色

    在css中,可以使用stroke属性改变svg颜色,只需要给svg中的polyline标签设置“stroke:颜色值”样式即可。stroke属性定义一条线,文本或元素轮廓颜色,值和color一样,支持rgba透明通道。 本教程操作环境:windows7系统、CSS3&&HTML5版、…

    2025年12月24日
    300
  • 详解CSS3+SVG滤镜实现不规则边框的方法

    详解CSS3+SVG滤镜实现不规则边框的方法详解CSS3+SVG滤镜实现不规则边框的方法详解CSS3+SVG滤镜实现不规则边框的方法详解CSS3+SVG滤镜实现不规则边框的方法

    本篇文章将介绍一种配合 svg 滤镜实现各种不规则图形添加边框的小技巧。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 需求背景,给不规则图形添加边框 在我们日常开发中,时长会遇到一些非矩形、非圆形的图案。类似下面这些: 使用纯 CSS,搭配一些技巧,是可以制作出上面的图形的,当然…

    2025年12月24日 • 用户投稿
    100
  • svg+css3实现动感的波浪效果

    本篇文章通过代码实例给大家介绍一下svg+css3实现动感的波浪效果。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 一根矢量的波浪 完整代码: .circle-countdown { width: 441px; height: 441px; position: relative;…

    2025年12月24日
    200
  • 在CSS背景图片中使用svg的用法介绍(附示例)

    本篇文章给大家带来的内容是关于在css背景图片中使用svg的用法介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 在CSS背景图片中使用SVG,可以使用css background属性的诸多特性,比如图片尺寸和图片位置等等。可以非常轻松的根据设备的尺寸来控制图片的尺寸,…

    用户投稿 2025年12月24日
    000
  • 利用SVG和CSS3实现炫酷的边框动画

    这篇文章主要介绍了利用svg和css3来实现一个炫酷的边框动画,不使用javascript使得编写过程轻松了不少,需要的朋友可以参考下 今天我们来探索一下Carl Philipe Brenner的网站上一个微妙而有趣的动画效果。当鼠标经过网格元素时,会有一个微妙的动画发生——网格元素变得透明,每条边…

    2025年12月24日
    000
  • html5如何发光边框_HTML5实现CSS发光边框效果技巧【发光边框】

    CSS发光边框有五种实现技巧:一、用box-shadow设0偏移+大模糊半径和rgba色;二、结合outline强化轮廓;三、对不规则元素用filter: drop-shadow();四、多重box-shadow叠加模拟层次光晕;五、配合:hover与transition实现交互式平滑发光。 如果您…

    2025年12月23日
    500
  • html5怎么引用图标_html5用iconfont或img标签引用图标文件显示【引用】

    HTML5图标显示异常可因路径错误、引用不当或字体未加载,解决方法包括:一、用iconfont类名引用;二、用Unicode字符引用;三、用img标签引用位图;四、内联SVG图标;五、预加载字体文件。 如果您在HTML5页面中需要显示图标,但图标无法正常加载或显示效果不符合预期,则可能是由于图标文件…

    2025年12月23日
    500
  • html5怎么设置半圆_HTML5用border-radius:50%+overflow裁切出半圆形状【设置】

    HTML5中创建半圆有五种方法:一、宽高比+border-radius+overflow裁切;二、伪元素+clip-path;三、单边border-radius控制;四、SVG矢量绘制;五、CSS clip-path path()函数。 如果您希望在HTML5中创建一个半圆形状的元素,可以通过组合使…

    2025年12月23日
    700

发表回复

登录后才能评论
关注微信