html5滤镜如何做浮雕质感_html5浮雕滤镜实现代码【步骤】
技术百科
雪夜
发布时间:2026-01-28
浏览: 次 Canvas 2D 的 ctx.filter 不支持浮雕滤镜,需用 SVG 的 feConvolveMatrix 或手动 getImageData 像素计算实现;SVG 方案需正确配置 kernelMatrix、edgeMode 和 bias,Canvas 方案需灰度化、Sobel 差分及溢出保护。
HTML5 Canvas 的 ctx.filter 不支持浮雕滤镜
直接用 ctx.filter = "url(#emboss)" 或类似 CSS filter 值是无效的——Canvas 2D 上下文的 filter 属性只接受 CSS filter 函数(如 blur(2px)、contrast(1.2)),但不支持自定义 SVG 滤镜或 url() 引用,更没有内置浮雕(emboss)效果。
用 SVG 实现浮雕质感
真正能做浮雕的是 SVG 的 ,它通过卷积核对图像像素加权计算,模拟光照斜射产生的明暗对比。关键点在于卷积核要体现“方向性边缘增

- 典型浮雕核是
[1, 0, 0, 0, -1, 0, 0, 0, 0]或更常用[2, 0, 0, 0, -1, 0, 0, 0, -1],注意order="3"和preserveAlpha="false" - 必须设
edgeMode="wrap"或"duplicate",否则边缘会发黑/发白 - SVG 滤镜需挂载在
内,再通过的filterCSS 属性或 CanvasdrawImage()绘制带滤镜的 SVG 元素
示例 SVG 片段:
Canvas 手动实现浮雕:用 getImageData() + 灰度 + 差分
若需动态控制或兼容性更强(比如绕过 SVG 滤镜限制),得自己算像素。核心步骤是:灰度化 → X/Y 方向差分 → 合并为单通道明暗 → 映射到 0–255。这不是“调个参数”,而是实打实的像素遍历:
- 灰度公式推荐用亮度法:
0.299*r + 0.587*g + 0.114*b,比平均值更准 - 差分用 Sobel 算子比简单减法更稳:
sx = (r[-1,-1]+2*r[0,-1]+r[1,-1]) - (r[-1,1]+2*r[0,1]+r[1,1]) - 最终输出 =
128 + 0.5*sx + 0.5*sy,避免溢出要Math.max(0, Math.min(255, ...)) - 注意:Canvas 跨域图片会触发
SecurityError,务必确保图片同源或已设置crossOrigin="anonymous"
CSS filter: url(#emboss) 的坑
这个写法看似简洁,但实际踩点极多:
-
url(#emboss)必须指向同文档内的 SVG,外链 SVG 不生效(CSP 和 CORS 双重限制) - Firefox 对
feConvolveMatrix的bias支持不稳定,建议固定设为bias="128"并配合div容器的background-color: #808080做底色补偿 - 滤镜作用于整个元素,无法只对图片局部浮雕;若需局部效果,得用 Canvas 截图 + 裁剪 + 滤镜 + 贴回
浮雕不是开关式效果,它依赖光源方向感和对比度平衡,bias、kernelMatrix、edgeMode 三个参数稍调就容易变“浮肿”或“塌陷”,动手前先拿 PS 试好核矩阵再搬代码。
# 的是
# 实打实
# 滤镜
# 若需
# css
# 设为
# 不支持
# edge
# svg
# html
# 遍历
# canva
# background
# Filter
# 明暗
# 跨域
# firefox
# 边缘
# math
# canvas
# html5
# 差分
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- Win11触摸板没反应怎么办_开启Win11笔记本
- php下载安装包太大怎么下载_分卷压缩下载方法【教
- Windows10怎么卸载预装软件_Windows
- Linux如何安装Tomcat应用服务器_Linu
- PHP 中如何在函数内持久修改引用变量所指向的目标
- 如何在Golang中处理云原生事件_使用Event
- Win11怎么设置组合键快捷方式_Windows1
- c++中的CRTP是什么 c++奇异递归模板模式【
- XAMPP 启动失败(Apache 突然停止)的终
- php能跑在stm32上吗_php在stm32微控
- 如何在Golang中优化文件读写性能_使用缓冲和并
- php文件怎么变mp4保存_php输出视频流保存为
- 如何使用Golang实现容器自动化运维_Golan
- 如何使用Golang recover捕获panic
- Python并发安全问题_资源竞争说明【指导】
- Win11怎么查看电脑配置_Win11硬件配置详细
- Windows10系统怎么查看防火墙状态_Win1
- Win10系统更新错误0x80240034怎么办
- Win11怎么更改电脑名称_Windows 11修
- Win11如何设置自动关机 Win11定时关机命令
- Win11此电脑不在桌面上_Windows 11桌
- Win10系统怎么查看网络连接状态_Windows
- Win11系统更新后黑屏怎么办 Win11更新黑屏
- Win11怎么打开旧版计算器_Win11恢复传统计
- VSC怎么在PHP中调试MySQL_数据库交互排查
- PythonFastAPI项目实战教程_API接口
- MAC如何隐藏文件夹及文件_MAC终端命令隐藏与第
- Win11怎么关闭自动修复_跳过Win11开机自动
- 如何在Golang中实现CI/CD流水线自动化测试
- php8.4如何配置ssl证书_php8.4htt
- php做exe支持多线程吗_并发处理实现方式【详解
- 如何解决Windows字体显示模糊的问题?(Cle
- C#怎么使用委托和事件 C# delegate与e
- Windows蓝屏错误0x0000002C怎么解决
- 电脑的“网络和共享中心”去哪了_Windows 1
- Windows执行文件被SmartScreen拦截
- Python日志系统设计与实现_高可观测性架构实战
- 如何用::实现单例模式_php静态方法与作用域操作
- c++如何实现一个高性能的环形队列(Ring Bu
- 如何在 ACF 中正确更新嵌套多层的 Group
- Win10如何关闭安全中心所有通知 Win10禁用
- VSC里PHP变量未定义报错怎么解决_错误抑制技巧
- 如何在Golang中捕获JSON序列化错误_Gol
- Python对象生命周期管理_创建销毁说明【指导】
- Win10如何备份驱动程序_Win10驱动备份步骤
- Win11如何开启telnet服务 Win11启用
- 如何在 ACF 中正确更新嵌套多层 Group 字
- Win11怎么关闭右下角弹窗_Win11拦截系统通
- 一文详解网站被黑客入侵挂马解决办法
- Win11怎么查看硬盘型号_Windows 11检

QQ客服