位置: 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 事件时,在左右上下部分出现空白部分的问题(我想问一下移动)

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

  • 微信可以直接扫哈罗单车吗(微信可以直接扫码登录吗)

    微信可以直接扫哈罗单车吗(微信可以直接扫码登录吗)

  • 怎么清理微信聊天图片和视频(怎么清理微信聊天的文件)

    怎么清理微信聊天图片和视频(怎么清理微信聊天的文件)

  • 华为nova5怎么恢复出厂设置(华为nova5怎么恢复手机信息)

    华为nova5怎么恢复出厂设置(华为nova5怎么恢复手机信息)

  • 小米关机键为什么呼出小爱同学了(小米关机键为什么没反应)

    小米关机键为什么呼出小爱同学了(小米关机键为什么没反应)

  • iphone11没有耳机孔吗(苹果11没有耳机)

    iphone11没有耳机孔吗(苹果11没有耳机)

  • 苹果录屏横屏变成直屏怎么办(苹果屏幕录制横屏)

    苹果录屏横屏变成直屏怎么办(苹果屏幕录制横屏)

  • 手机分屏算不算切屏(手机分屏算不算剪辑视频)

    手机分屏算不算切屏(手机分屏算不算剪辑视频)

  • 华为p40什么手机上市(华为P40什么手机好)

    华为p40什么手机上市(华为P40什么手机好)

  • 台式电脑型号怎么看(台式电脑规格型号怎么查)

    台式电脑型号怎么看(台式电脑规格型号怎么查)

  • qq为什么不能上传精选照片(qq为什么不能上传微信二维码)

    qq为什么不能上传精选照片(qq为什么不能上传微信二维码)

  • 怎么查看手机卸载软件的记录(怎么查看手机卸载)

    怎么查看手机卸载软件的记录(怎么查看手机卸载)

  • 闪存盘和u盘怎么区别(闪存盘和u盘哪个好)

    闪存盘和u盘怎么区别(闪存盘和u盘哪个好)

  • 至强e52630相当于i几(至强e52630处理器怎么样)

    至强e52630相当于i几(至强e52630处理器怎么样)

  • wpa presharedkey是什么(wpa presharedkey是不是无线密码)

    wpa presharedkey是什么(wpa presharedkey是不是无线密码)

  • 金立m7多任务界面在哪(金立手机的任务管理器在哪)

    金立m7多任务界面在哪(金立手机的任务管理器在哪)

  • 手机网络无法连接怎么办(手机网络无法连接是什么原因)

    手机网络无法连接怎么办(手机网络无法连接是什么原因)

  • word表格竖排改为横排(word表格设置竖排文字)

    word表格竖排改为横排(word表格设置竖排文字)

  • 荣耀20哪里设置微信美颜(荣耀20哪里设置时间格式)

    荣耀20哪里设置微信美颜(荣耀20哪里设置时间格式)

  • 微信如何查看最近访客(微信如何查看最近联系人及聊天记录)

    微信如何查看最近访客(微信如何查看最近联系人及聊天记录)

  • 旺旺号降权还能刷了吗(旺旺号降权还能恢复吗)

    旺旺号降权还能刷了吗(旺旺号降权还能恢复吗)

  • 抖音注册方式有几种(抖音注册方式有几种电话不够)

    抖音注册方式有几种(抖音注册方式有几种电话不够)

  • 怎么下载压缩包(百度网盘怎么下载压缩包)

    怎么下载压缩包(百度网盘怎么下载压缩包)

  • 华为折叠手机matex3参数配置(华为折叠手机mateXs)

    华为折叠手机matex3参数配置(华为折叠手机mateXs)

  • 含税价怎么算不含税价
  • 自动售货机进货渠道
  • 投资收回的现金
  • 建筑业预缴企业所得税
  • 营业收入与利润变化图
  • 暂缓收缴工会经费的请示
  • 对母公司的其他说法
  • 哪个会计科目必须对全部项目发函证
  • 免税即征即退先征后退
  • 取得失控发票
  • 溢价收购怎么做账
  • 可供出售交易性金融资产申报表怎么填
  • 小规模纳税人零申报是每季度报吗
  • 一般纳税人提供服务税率
  • 小型连锁药店需要报国税吗?
  • 免抵退和免退税哪种划算
  • 大连国税局工资待遇怎么样
  • 从租计征的房产税减半政策
  • 无形资产摊销可以按照其价值和使用情况
  • 企业应交增值税的计算公式
  • 固定资产投资增长意味着什么
  • 应付票据属于什么类账户
  • 买卖房子归谁管
  • 增值税进项税怎么算
  • 上个月多计提的工资怎么调整
  • 电脑每次开机都要选择系统怎么办
  • wordpress访问速度优化
  • win7网络适配器不见了怎么恢复
  • Linux dpkg-query 命令用法详解(Debian Linux中软件包的查询工具)
  • 蓝莓外面的霜
  • 对数组描述正确的是
  • 跨期摊提类账户
  • 电子缴款凭证能代替完税证明吗
  • node升级版本
  • 收到投资款投资人怎么感谢
  • 金税盘全额抵扣政策
  • 产权转移数据印花
  • 一般纳税人开发票给小规模纳税人
  • 取得不规范发票的处理
  • 个体工商户开票是企业还是个人
  • wordpress加速
  • 按月计提固定资产折旧算收入吗
  • 小规模纳税人免税怎么做账
  • 差旅费需要缴纳增值税吗
  • 企业付美金外汇要交税吗
  • 收到小微企业退税怎么做账
  • 核销坏账递延资产怎么算
  • 工资总额借方和贷方的区别
  • 应交税费减免税款的分录
  • 稳岗返还的概念
  • 企业所得税法允许按规定的比例在税前扣除的准备金
  • 持有至到期投资减值准备可以转回吗
  • 增值税专用发票和普通发票的区别
  • 增值税进项用不完怎么办
  • 金蝶计价方法在哪里
  • 什么情况下可以待岗
  • 期末计提利息怎么算
  • 资产处置收益和资产减值损失区别
  • php的每条语句以什么结尾
  • friend怎么用
  • win8更改桌面位置
  • macbook macos
  • 简单易上手 固态硬盘SSD安装WIN7系统的3种办法
  • award bios设置图解教程
  • wintogo.exe
  • 苹果电脑重新安装macos失败
  • centosfind命令
  • win7系统笔记本怎么连接wifi
  • Win7升级win10后可以删除2345吗
  • win10桌面图标排列设置
  • 用jquery实现隔行变色
  • nodejs数据库数据渲染
  • nodejs获取get请求参数
  • cmd命令format
  • 在全盘搜索以win
  • python的threadpool
  • centos6.5
  • 河南省注册税务师协会电话
  • 房屋契税和维修基金是开发商交还是业主交
  • 贵州银行短信服务怎么开通
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设