Странный CSS-хак для повышения резкости изображений (только Chrome 59 и 60)

Я столкнулся со странным поведением в Chrome v60.0, когда я поместил уменьшенное изображение поверх себя и установил CSS image-rendering параметр для pixelated:

#container {
  position: relative;
  width: 160px
}

.image {
  width: 100%
}

.overlay {
  width: 100%;
  position: absolute;
  left: 0px;
  top: 0px;
  image-rendering: pixelated
}
<div id="container">
  <img class="image" src="http://www.publicdomaintreasurehunter.com/wp-content/uploads/2011/01/muscle.jpg">

  <img class="overlay" src="http://www.publicdomaintreasurehunter.com/wp-content/uploads/2011/01/muscle.jpg">
</div>

Вместо того, чтобы казаться пикселированным, как и ожидалось, изображение будет гладким (и более резким, чем оригинал). Обычно когда pixelated применяется, изображение выглядит довольно зернистым (см. ниже).

Вы можете проверить это, удалив 1-е изображение в контейнере и сравнив результат. Или удалите 2nd, чтобы увидеть рендеринг по умолчанию.

Одно предостережение, однако. Несмотря на то, что он может отлично работать с фотографиями, на некоторых краях возникают неровности при использовании иллюстраций. Один из обходных путей заключается в том, чтобы перейти между ними и применить непрозрачность 0,4 или около того к наложенному изображению, что дает по крайней мере некоторую резкость.

Есть ли объяснение этому поведению? Это не работает в IE или любых других браузерах, которые я пробовал.

Пример графического изображения: (1) рендеринг по умолчанию, (2) с рендерингом изображений и (3) хакерство CSS

ОБНОВЛЕНИЕ: я проверил это в следующих 32-битных и 64-битных версиях Chrome, и вот результаты:

60.0.3112.113 (64-разрядная версия) - Работает

60.0.3112.101 (64-разрядная версия) - Работает

59.0.3071.86 (64-разрядная версия) - Работает

58.0.3029.96 (64-разрядная версия) - не обязательно использовать хак, так как image-rendering: pixelated уже отображает заостренное изображение без пикселизации

58.0.3029.96 (32-разрядная версия) - не обязательно использовать хак, так как image-rendering: pixelated уже отображает заостренное изображение без пикселизации

57.0.2987.133 (64-разрядная версия) - не обязательно использовать хак, так как image-rendering: pixelated уже отображает заостренное изображение без пикселизации

56.0.2924.87 (64-разрядная версия) - не работает

55.0.2883.75 (64-разрядная версия) - не работает

53.0.2785.116 (32-разрядная версия) - не работает

48.0.2564.109 (64-разрядная версия) - не работает

1 ответ

Это не уникально для CSS. Шум / зернистость имеет тенденцию создавать иллюзию резкости или повышенной детализации из-за пикселей, делающих края более выраженными, среди прочего. Многие методы повышения резкости в конечном итоге увеличивают количество шума, что обычно является нежелательным побочным эффектом, хотя очень осторожное и очень тонкое применение шума к изображению может создать эту иллюзию без заметного ухудшения качества изображения.

Смотрите также: Почему в фотографическом шуме присутствует иллюзия деталей?

Другие вопросы по тегам