DigitalOcean 为您的旅程的每个阶段提供云产品。 立即开始使用 价值 $200 的免费积分!
image-rendering
属性定义了浏览器在将图像按比例放大或缩小到其原始尺寸以外的尺寸时应该如何渲染图像。 默认情况下,每个浏览器都会尝试对缩放后的图像应用抗锯齿,以防止失真,但这有时会成为问题,因为我们希望图像保留其原始像素化形式。
img {
image-rendering: auto;
image-rendering: crisp-edges;
image-rendering: pixelated;
/* Safari seems to support, but seems deprecated and does the same thing as the others. */
image-rendering: -webkit-optimize-contrast;
}
关于这三个可能的值
auto
:默认值,它使用浏览器的标准算法来最大限度地提高图像的外观。crisp-edges
:图像的对比度、颜色和边缘将保留,不会进行任何平滑或模糊处理。 根据规范,这专门针对 像素艺术。 此值适用于放大或缩小的图像。pixelated
:随着图像尺寸发生变化,浏览器将通过使用 最近邻缩放 来保留其像素化样式。 此值仅适用于放大的图像。
此属性可以应用于背景图像、canvas
元素以及内联图像。 但是,重要的是要注意,由于目前浏览器支持不一致,因此测试这些值特别令人困惑。
示例
这是一个非常小的内联图像,由四个彩色像素组成
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAAXNSR0IArs4c6QAAACdJREFUCB1j9Pf3/88ABMmMjCCKgQlMIhGMu3btAquY9mMDWBhDBQAutwfDrUlKzQAAAABJRU5ErkJggg==">
如果我们将此内联图像的宽度更改为 300px
,那么在 Chrome(41)中,我们会发现浏览器已尽力优化图像

为了保留其原始像素化外观,我们可以使用以下 pixelated
值,如下所示
img {
image-rendering: pixelated;
}
这将导致浏览器选择另一种算法来处理图像。 在此示例中,Chrome 将删除默认抗锯齿

不幸的是,经过大量的测试,似乎浏览器目前以非常混乱的方式解释 crisp-edges
和 pixelated
值,因此再次强调,此规范仍处于早期阶段。 例如,Chrome 似乎以与 Firefox 和 Safari 渲染带有 crisp-edges
的图像相同的方式渲染 pixelated
图像。
QR 码示例
此属性的另一个用例可能是用于 QR 码,您希望通过使用标准抗锯齿来增大其尺寸,而不会使其失真。 确保在 全屏模式 下查看此示例,以查看图像的拉伸
切换示例
在下面的 Pen 中,可以在这两个值之间切换,并查看浏览器之间的差异
其他资源
浏览器支持
crisp-edges
目前需要供应商前缀 (-moz-crisp-edges
) 以获得尽可能好的支持。
此浏览器支持数据来自 Caniuse,其中包含更多详细信息。 数字表示浏览器在该版本及更高版本上支持该功能。
桌面
Chrome | Firefox | IE | Edge | Safari |
---|---|---|---|---|
41 | 3.6* | 11* | 79 | 10 |
移动设备/平板电脑
Android Chrome | Android Firefox | Android | iOS Safari |
---|---|---|---|
127 | 127 | 127 | 10.0-10.2 |
在更新时,Firefox 61 支持 crisp-edges
但不支持 pixelated
,Chrome 68 支持 pixelated
但不支持 crisp-edges
。
你说“在这个例子中,Chrome 将移除默认的反锯齿”,但它不应该叫做“锯齿”吗?锯齿从技术上来说是指两个不同的事物在边缘融合在一起,对吧?所以浏览器对放大后的图片执行锯齿处理,对吧?只是有点困惑。谢谢
你弄反了。锯齿化是信号被数字化时发生的事情,彼此接近的值变成相同的值,因为数字分辨率不允许任何东西“介于”像素或采样点之间。反锯齿化是用来解决这个问题的。
https://en.wikipedia.org/wiki/Aliasing
为什么使用供应商前缀,当你让它看起来像
image-rendering: pixelated;
是你需要的一切?你的二维码示例 CSS 说但是当你用 web 浏览器的开发者工具检查它时,它说
而且浏览器支持表中列出了 Opera 为红色(不支持),但 IE 为黄色(部分支持)。它应该是相反的,就像表中的文本所说。
嗨,
我在寻找 WordPress 中模糊图片的解决方案时,偶然发现了你的网站。它们只在 Chrome 中模糊,IE 和 Firefox 则以应该显示的样子显示它们……
在论坛上我发现
image-rendering: -moz-crisp-edges; /* Firefox /
image-rendering: -o-crisp-edges; / Opera /
image-rendering: -webkit-optimize-contrast;/ Webkit (非标准命名) /
image-rendering: crisp-edges;
-ms-interpolation-mode: nearest-neighbor; / IE (非标准属性) */
我应该把它放在哪里才能将代码应用到我 WP 页面上的所有图片,这会解决 Chrome 中的模糊问题吗?
谢谢,
Peter
这篇文章已经很久了,但我还是想回答一下。正如上面的文章所说,实现它的最简单也是最基本的方法是将你的 CSS 代码放到你的主题的主要样式表中,在“img”选择器下。如果在 WordPress 中,那将是在你的主题的主要 style.css 中。
img {
image-rendering: -moz-crisp-edges; /* Firefox /
image-rendering: -o-crisp-edges; / Opera /
image-rendering: -webkit-optimize-contrast;/ Webkit (非标准命名) /
image-rendering: crisp-edges;
-ms-interpolation-mode: nearest-neighbor; / IE (非标准属性) */
}
这本来是一个很棒的功能;然而,又一次,浏览器之间的差异让人感觉过时了!
Image-rendering: -webkit-optimize-contrast 现在在 Chrome 中不起作用。我不知道为什么。
在我这里 Chrome 中可以运行
image-rendering: -webkit-optimize-contrast;
和
image-rendering: crisp-edges;
两者在 Chrome 中都可以运行。
事实上,在 Windows 中,crisp-edges 很可能给图片带来摩尔纹。
webkit-optimize-contrast 在 Chrome 中渲染效果更好,并将覆盖 crisp-edges。
Edge 中完全不支持。谢谢微软。我想我只能告诉我的用户下载其他浏览器了。
到底是怎么回事……
我本周的网站开发:对微软 Edge 的憎恨
它一直在崩溃,调整大小的图片看起来很糟糕,当你查看 Edge 的建议时,它在那里,但它一直在考虑从 2015 年开始解决这个问题!
https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/7902426-image-rendering-pixelated