位置: IT常识 - 正文

不借助 Javascript,利用 SVG 快速构建马赛克效果(不借助的英文)

编辑:rootadmin
之前在公众号转发了好友 Vajoy 的一篇文章 -- 巧用 CSS 把图片马赛克风格化。 核心是利用了 CSS 中一个很有意思的属性 -- image-rendering,它可以用于设置图像缩放算法。 何为 image-rendering? CSS 属性 image-rendering 用于设置图像 ...

推荐整理分享不借助 Javascript,利用 SVG 快速构建马赛克效果(不借助的英文),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:不借助工具怎么画圆,不借助任何器械工具,人类徒手潜水的深度记录,不借助的英文,不借助工具怎么画圆,不借助任何工具怎么画圆,不借助圆规怎么画圆,不借助其他变量交换两个变量的值,不借助英语,内容如对您有帮助,希望把文章链接给更多的朋友!

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

核心是利用了 CSS 中一个很有意思的属性 -- image-rendering,它可以用于设置图像缩放算法。

何为 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:

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

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

<img src="?30x30" />img { width: 300px; height: 300px; image-rendering: pixelated}

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

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

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

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

不借助 Javascript,利用 SVG 快速构建马赛克效果(不借助的英文)

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

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

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

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

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

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

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

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

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

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

<img src="" alt=""><svg> <filter id="pixelate" x="0" y="0"> <feFlood x="4" y="4" height="2" width="2"/> <feComposite width="8" height="8"/> <feTile result="a"/> <feComposite in="SourceGraphic" in2="a" operator="in"/> <feMorphology operator="dilate"radius="5"/> </filter></svg>img { width: 300px; height: 300px; filter: url(#pixelate);}

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

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

有意思!强大的 SVG 滤镜有意思!不规则边框的生成方案震惊!巧用 SVG 滤镜还能制作表情包?CSS/SVG 实现马赛克的局限性

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

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

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

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

CodePen Demo - image-rendering pixelated applicationSVG Pixel Filter最后

好了,本文到此结束,希望对你有帮助 ?

更多精彩 CSS 技术文章汇总在我的 Github -- iCSS ,持续更新,欢迎点个 star 订阅收藏。

如果还有什么疑问或者建议,可以多多交流,原创文章,文笔有限,才疏学浅,文中若有不正之处,万望告知。

本文链接地址:https://www.jiuchutong.com/zhishi/313052.html 转载请保留说明!

上一篇:【已解决】移动端页面手势滑动触发touch 事件时,在左右上下部分出现空白部分的问题(我想问一下移动)

下一篇:织梦系统基本参数里新变量删除方法(织梦程序)

  • 可口和宝洁居然说数字营销效果差?!(可口旗下的品牌)

    可口和宝洁居然说数字营销效果差?!(可口旗下的品牌)

  • mrpii是什么(mrp什么意思)

    mrpii是什么(mrp什么意思)

  • 苹果11怎么突然没有振动了(苹果11怎么突然变成黑白的了)

    苹果11怎么突然没有振动了(苹果11怎么突然变成黑白的了)

  • 快手推广保证金可以不交吗(快手推广保证金和店铺保证金区别)

    快手推广保证金可以不交吗(快手推广保证金和店铺保证金区别)

  • 怎样在手机上修改邮箱密码(怎样在手机上修改文件名)

    怎样在手机上修改邮箱密码(怎样在手机上修改文件名)

  • 手机外放声音小怎么办(手机外放声音小怎么解决)

    手机外放声音小怎么办(手机外放声音小怎么解决)

  • 微信浮窗不见了怎么办(微信浮窗不见了怎么找出来)

    微信浮窗不见了怎么办(微信浮窗不见了怎么找出来)

  • 被移出群聊意味着什么(被移出群聊是什么)

    被移出群聊意味着什么(被移出群聊是什么)

  • 小米售后屏幕是否都为原装(小米售后屏幕是原装的吗)

    小米售后屏幕是否都为原装(小米售后屏幕是原装的吗)

  • al00a华为是什么型号(al00是华为什么型号)

    al00a华为是什么型号(al00是华为什么型号)

  • 有锁裸机什么意思(裸机美版有锁未激活什么意思)

    有锁裸机什么意思(裸机美版有锁未激活什么意思)

  • 等待验证是拉黑吗(等待验证是不是对方把我删了)

    等待验证是拉黑吗(等待验证是不是对方把我删了)

  • 华为默认字体是什么字体(华为默认字体大小是多大)

    华为默认字体是什么字体(华为默认字体大小是多大)

  • 淘宝过了退货日期怎么退货(淘宝退货过了退货时间怎么申请退款)

    淘宝过了退货日期怎么退货(淘宝退货过了退货时间怎么申请退款)

  • iphone7上市时间(iphone7上市时间中国)

    iphone7上市时间(iphone7上市时间中国)

  • 淘宝app怎么看好评率(怎么在淘宝看)

    淘宝app怎么看好评率(怎么在淘宝看)

  • 抖音发了为啥浏览量为0(为什么抖音发的视频浏览量显示但是看不到)

    抖音发了为啥浏览量为0(为什么抖音发的视频浏览量显示但是看不到)

  • AirPodsPro怎么连接Mac(airpodspro怎么连接windows电脑)

    AirPodsPro怎么连接Mac(airpodspro怎么连接windows电脑)

  • miui11多久更新(小米11多久更新miui12.5)

    miui11多久更新(小米11多久更新miui12.5)

  • xsmax怎么自定义铃声(iphonexsmax如何设置自定义铃声)

    xsmax怎么自定义铃声(iphonexsmax如何设置自定义铃声)

  • 华为mate10怎么截屏(华为mate40e怎么截屏)

    华为mate10怎么截屏(华为mate40e怎么截屏)

  • 拼多多悬浮窗怎么关(拼多多悬浮窗怎样关闭)

    拼多多悬浮窗怎么关(拼多多悬浮窗怎样关闭)

  • ai解除锁定(ai解除锁定是哪个键)

    ai解除锁定(ai解除锁定是哪个键)

  • 拼多多极速退款多久给退(拼多多极速退款怎么突然没有了)

    拼多多极速退款多久给退(拼多多极速退款怎么突然没有了)

  • 王者荣耀花木兰怎么玩?(王者荣耀花木兰打法教学)

    王者荣耀花木兰怎么玩?(王者荣耀花木兰打法教学)

  • 跨区域涉税事项反馈表怎么填
  • 购买软件无形资产
  • 代理记账公司账本
  • 每月长摊金额如何分摊
  • 固定资产清理的金额怎么算
  • 私对公转账可以撤回吗
  • 出口报关金额要考虑银行手续费吗
  • 递延收益为什么要摊销
  • 核销贷款收回会计分录
  • 报废车辆残值收入交多少增值税
  • 外贸企业0退税率的账务处理
  • 法人代表领工资怎么领
  • 前期工程费如何分摊
  • 印花税滞纳金计算方法
  • 统借统还定义
  • 土地作价入股政策
  • 供应商赠送
  • 企业长期股权投资
  • 哪些人需缴纳个人所得税
  • 华为最新款手机2023款
  • 公务接待和商务接待自查
  • 国外差旅费如何报销
  • 未分配利润可留待以后年度进行分配的当年结余利润
  • 出差环境补贴怎么算
  • 没有实际出资的股东怎么退出
  • 股东无偿转让股权
  • uniapp实战视频教程
  • getcodebase
  • 元宇宙band
  • 向农户收购农产品怎么打款
  • 企业支付给员工的一次性伤残就业补助金计入什么科目
  • php5.6+mysql
  • zendframework3
  • 会计准则长期待摊费用开始计提摊销的时间
  • 网络技术公司技能培训
  • javascript编写程序
  • vue动态路由是什么
  • ethtool-g
  • init 6命令
  • 金融企业贷款损失税前扣除
  • css浮动怎么弄
  • 农产品免税收入怎么做账
  • 企业的应交税金一般通过什么科目核算
  • 不动产物权归属和内容的根据是什么?
  • 不需要开发票的现金收入怎么做内账?
  • 公司向法人借款需要多久还清
  • 怎么确定应付账款的完整性
  • 财务报表信息的分类
  • 不动产集体产权证什么意思
  • 公司清算的特征
  • mysql 锁详解
  • 小企业会计准则适用于哪些企业
  • 一般纳税人销售旧货
  • 应付职工薪酬包含哪些科目
  • 坏账损失的定义
  • 补交以前年度的房产税会计分录
  • 小规模纳税人标准500万是含税吗
  • 利润表的营业成本包括管理费用吗
  • 管理费用中的水电费怎么记账
  • 验资 银行
  • 在window中
  • ubuntu20.04怎么安装
  • win2000系统安装教程
  • windows个性化设置在哪里
  • ias.exe是什么程序
  • vps如何搭建ss
  • ExtJS扩展 垂直tabLayout实现代码
  • node.js ajax
  • animate怎么整个图层移动
  • jquery中的基本选择器有哪些
  • 新浪微博手机客户端下载
  • python3 flask
  • js写日期
  • 手机银行如何查询明细
  • ca登陆
  • 西藏五个确保是什么?
  • 宪法宣誓仪式流程图
  • 税率的计算器在线计算
  • 东莞国税稽查分局局长
  • 法治税务示范基地枫桥
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设