位置: IT常识 - 正文

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

发布时间:2024-01-29
之前在公众号转发了好友 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 事件时,在左右上下部分出现空白部分的问题(我想问一下移动)

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

  • 增值税专用发票抵扣期限
  • 促成自然灾害的原因
  • 公司给员工租的宿舍怎么交税
  • 存在弃置费用的固定资产的财务费用
  • 中标服务费计入什么会计科目
  • 来料加工生产成本账务处理
  • 税收优惠退税账户是什么
  • 对公账户如何转到法人账户
  • 基金收入交增值税吗
  • 出口报关金额要考虑银行手续费吗
  • 减税的案例
  • 接受捐赠的固定资产进项税额可以抵扣吗
  • 委托代销商品委托方发出商品的分录
  • 增值税抵扣联退税多少
  • 公账转私账可以撤销吗
  • 知道发票代码怎么查询发票号码
  • 单位预算支出包括哪些
  • 固定资产转入清理记账凭证
  • 华为手机hms提醒
  • 微信打开链接无法滑动
  • 职工教育经费是工资总额的多少
  • 通行费发票可以抵扣吗
  • 查账征收的个独可以随意分配利润吗
  • 联想e430安装win7
  • win11版本22000.194
  • word的拼写检查总是变成法语
  • ue4安装插件
  • 2019年下半年中小学教师资格考试综合素质试题
  • win10点击网络属性没反应
  • php字符转换成数字
  • codemeter control
  • 前端大屏常用的输入法
  • 应交增值税视频讲解
  • 融资租入固定资产是什么意思
  • 各种汇票
  • java项目报错
  • 公司向法人借款的借条怎么写
  • 凭证字号怎么写
  • 未注销的坏账可以处理吗
  • 小规模纳税人每月申报什么税
  • docker 容器
  • 企业年产值与年收入比例
  • 入库税款异常是啥意思
  • 承包安装工程活怎么接
  • 先收到保险公司赔付然后赔给顾客医药费怎么做帐
  • js方案
  • linux服务器环境搭建
  • 年会服装费属于什么费用
  • 发放工资代扣个人所得税的记账凭证怎么填
  • 个人独资企业增值税免征额
  • mysql1290报错
  • 递延所得税资产和所得税费用的关系
  • 小规模纳税人免税政策2022
  • 固定资产入账及计提折旧
  • 购入固定资产怎么抵扣企业所得税
  • 为什么生产成本不属于损益类科目
  • 销货清单自己留哪一联
  • 支付关税现金流放哪儿
  • 公司接待考察团的费用入哪个科目
  • 作废的支票由谁保管
  • 一般纳税人购入固定资产进项抵扣
  • 关于外贸企业出口的规定
  • 现金日记账的日期栏是指记账凭证的日期
  • win7打开浏览器很慢
  • 如何删除windows media center
  • 苹果Mac系统怎么恢复出厂系统
  • 怎么把perl删除干净
  • 实用的批处理
  • python的类变量和成员变量
  • jqueryui dialog
  • javascript巧用eval函数组装表单输入项为json对象的方法
  • 国家税务局网上电子税务局官网重庆
  • 河南省出租车网
  • 简述会计估计及其特点
  • 税务局查帐流程
  • 房产税的解读
  • 高新企业人才落户北京
  • 国家级运动员怎么申请
  • 珠海的教育水平在全省的排名
  • 文件清理规则
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号