【发布时间】:2018-11-02 01:14:22
【问题描述】:
如果我从任意 URL(本地或远程)加载图像,并且不想使用 javascript 或服务器端处理,是否可以使用 CSS 从客户端对其进行锐化?
【问题讨论】:
标签: image css image-processing client-side
如果我从任意 URL(本地或远程)加载图像,并且不想使用 javascript 或服务器端处理,是否可以使用 CSS 从客户端对其进行锐化?
【问题讨论】:
标签: image css image-processing client-side
是的,对于某些浏览器(如 Chrome 和 Firefox),这已经是可能的。
尤其需要mix-blend-mode 和CSS filters。
Here's a codepen 以 Lenna 图像为例,并将其(编译)副本作为代码 sn-p:
.foo,
.bar,
.bar::after,
.baz {
width: 512px;
height: 512px;
position: absolute;
}
.foo {
z-index: 1;
mix-blend-mode: luminosity;
opacity: 0;
overflow: hidden;
-webkit-filter: contrast(1.25);
filter: contrast(1.25);
}
.foo:hover {
opacity: 1;
}
.bar,
.bar::after,
.baz {
background: url(https://upload.wikimedia.org/wikipedia/en/7/7d/Lenna_%28test_image%29.png);
}
.bar::after {
content: '';
-webkit-filter: blur(4px) invert(1) contrast(0.75);
filter: blur(4px) invert(1) contrast(0.75);
mix-blend-mode: overlay;
}
<div class="foo">
<div class="bar"></div>
</div>
<div class="baz"></div>
将鼠标悬停在图像上以查看效果。调整参数(可能使用opacity 来“淡化”效果,类似于不锐化蒙版的“强度”设置)有助于在特定用例中产生更理想的结果。
【讨论】:
我发现了一个可以使用 CSS 锐化缩小图像的 hack。它只适用于 Chrome,但根据我的经验,Chrome 似乎比其他浏览器更容易模糊图像。这将基本上“消除”模糊并使图像看起来更像原始图像。使用绝对定位将图像叠加在自身之上,并将image-rendering 设置为pixelated。这里给出一个例子:
Weird CSS hack for sharpening images (Chrome 59 and 60 only)
【讨论】: