Chrome 中的模糊缩小图像

Blurry downscaled images in Chrome

我正在使用 gravatars,当我用 css 缩小它们时,我经常使用它,我相信 Google Chrome 直到最近才正确地使用它(我可能是错的,不确定问题是什么时候开始出现的)但是现在,图像在缩小时会变得模糊,而且这种情况只发生在 Chrome 中,FF 缩小非常好。我尝试使用 image-rendering 但它没有解决问题。谁能告诉我最好的方法是什么?

示例可以在 here 中找到,在 Chrome 中打开它,然后在 FF 中打开它,在 Chrome 中应该比在 FF 中更模糊。

谢谢

我在 Mac 上发现了完全相同的问题:Firefox 很好地缩小了图像,而 Chrome 让它看起来很模糊,这非常糟糕。 我不在乎渲染时间或速度,我需要徽标看起来不错!

我发现以下 CSS 规则修复 Chrome Mac

image-rendering: -webkit-optimize-contrast;

我发现解决这个问题的最好方法就是使用 svg。另一种选择是使用 css 媒体查询来加载自适应图像大小。

我提出了另一条轨道,因为我处于同样的情况:图像在 chrome 下略微模糊,但在 firefox 下无可挑剔。 Ctrl + "0" 解决了问题。我不得不有一天使用缩放(Ctrl + "+""-")并且没有完全重置它...

更新

我没有意识到使用 2x 后的图像大小与目标大小相匹配,并且浏览器没有缩小尺寸。此解决方案仅在您可以为图像使用固定大小的容器时才有效。

tl;博士

设置图片比例,Chrome会适当缩小。在 Chrome 84.

中测试

重要的部分是在末尾使用 srcset2x

<img srcset="image-2x.png 2x" alt="alt">

完整答案

我试过了image-rendering: -webkit-optimize-contrast。它改进了 Chrome 中的渲染图像,但也让我在 Safari 中看到了一个糟糕的图像版本。

起初,我需要缩小尺寸,因为 Retina 显示器仍然需要图像的 2x 版本(否则放大可能看起来很模糊)。所以我决定创建两个版本(1x 和 2x)。

添加两者后,我看到如果我只使用原始 2x 图像但使用 srcset 中指定的 2x,则图像将不再模糊。

我发现用过 transform: translateZ(0); 是可行的。

同问:How to prevent blur on image resize in Chrome?

在 Chrome 中对 Windows 使用 will-change: transform;,对 Mac 使用 image-rendering: -webkit-optimize-contrast;

使用 image-rendering 完全解决了 Chrome 上的模糊图像问题,但图像随后在 Safari 上像素化。这种媒体查询组合对我有用,可以在 Chrome 29+ 上设置 属性 并在 Safari 11+ 上设置 unset

@media screen and (-webkit-min-device-pixel-ratio:0)
and (min-resolution:.001dpcm) {
  img {
    image-rendering: -webkit-optimize-contrast !important;
  }
}

/* Unset for Safari 11+ */
@media not all and (min-resolution:.001dpcm)
{ @supports (-webkit-appearance:none) and (stroke-color:transparent) {
  img {
    image-rendering: unset !important;
  }
}}

transform: translateZ(0);好像已经不行了.
我发现唯一有影响的 属性 是 image-rendering: -webkit-optimize-contrast;(注意:这对 iOS safari 有很大不同的影响,它使图像非常像素化,所以你只想在 chrome 和 edge)

上启用它

这是使用此图像的比较:<img src="https://i.stack.imgur.com/acaio.jpg" style="width: 244px; height: 244px;">(在 windows 10 上) 标牌上的文字特写:我认为 firefox 的渲染明显更好,但优化对比度 确实 有帮助。

我可能会完成这个线程。

我发现了可以被视为错误(或者可能是功能)的内容。

如果使用 CSS 大方形位图图像(例如 500px x 500px JPEG)中的徽标缩小到 63px x 63px 方形,结果在 Chrome 版本 97.0 中非常模糊。 4692.99 或我计算机上的任何基于 WebKit 的浏览器。 (Opera、Edge)但不是 Firefox。

改成64px x 64px,突然效果变好了。

我想 WebKit 认为小尺寸图像不重要,因此可以使用不同的、更快但模糊的算法进行缩放。

如果您将网站上的徽标缩小到 63 像素或 60 像素,请考虑将它们放大一点。在检查器中进行测试以验证渲染是否令人满意。

不客气!

使用 transform: translateZ(1px); 为我解决了 Chrome 中的问题,同时不会在视觉上影响其他浏览器。

这将使您在 chrome 的缩放图像中获得清晰锐利的图像。你需要 translateZ(0) 和 scale not (1)

img {
border: none;
display: block;
transform: translateZ(0) scale(0.999999);
}

但是如果使用任何悬停比例,请确保您还再次添加了 translateZ(0)。

img:hover {
transform: translateZ(0) scale(1.1);
}