缩小变换使图像模糊
transform scaleing down makes image blurry
我尝试为某些产品在悬停时做一点缩放效果。为此,我将图像的容器缩小到 95%,并在悬停时也将其缩放到 100%:
但是按比例缩小的图像看起来很模糊。我尝试了有关此主题的其他问题中给出的不同解决方案,例如:backface-visibility、blur(0)、translateZ。但似乎什么都改变不了。
有没有办法让它更漂亮,或者它是否已经达到最佳状态?
.container {
transform: scale(0.95);
transition: transform 70ms ease-in;
float: left;
}
.container:hover {
transform: scale(1);
}
<div class="container">
<img src="https://s28.postimg.org/kagu55chp/csm_632san_Amalfi_Pearl_ca02784e51.jpg" />
</div>
<div class="container">
<img src="https://s24.postimg.org/cdecsntlx/csm_594san_Amalfi_Silver_bbb138a25a.jpg" />
</div>
我认为您的问题与像素插值有关:http://www.cambridgeincolour.com/tutorials/image-interpolation.htm
调整图像大小时,必须调整像素。通过收缩,像素被平均和减少。通过放大,增加了像素,像素之间的平均值填补了空白。
请使用图像编辑器(如 Photoshop 或 Gimpshop)调整图像大小,因为图像程序比网络浏览器更适合此操作。
关于这一点,在浏览器处理插值时,某些百分比比其他百分比效果更好。我注意到它通常是每个季度的那些:减少 25%、50%、75% 和放大 125%、150%、175% 往往比其他数字(如 95% 或 73% 等)处理得更好。 ).
将以下 CSS 添加到您的 img
元素中(不安全 cross-browser-wise):
img {
image-rendering: -moz-crisp-edges; /* Firefox */
image-rendering: -o-crisp-edges; /* Opera */
image-rendering: -webkit-optimize-contrast; /* Webkit (non-standard naming) */
image-rendering: crisp-edges;
-ms-interpolation-mode: nearest-neighbor; /* IE (non-standard property) */
}
下面的片段:
.container {
transform: scale(.95);
transition: transform 70ms ease-in;
float: left;
}
.container:hover {
transform: scale(1);
}
img {
image-rendering: -moz-crisp-edges; /* Firefox */
image-rendering: -o-crisp-edges; /* Opera */
image-rendering: -webkit-optimize-contrast; /* Webkit (non-standard naming) */
image-rendering: crisp-edges;
-ms-interpolation-mode: nearest-neighbor; /* IE (non-standard property) */
}
<div class="container">
<img src="https://s28.postimg.org/kagu55chp/csm_632san_Amalfi_Pearl_ca02784e51.jpg" />
</div>
<div class="container">
<img src="https://s24.postimg.org/cdecsntlx/csm_594san_Amalfi_Silver_bbb138a25a.jpg" />
</div>
备选方案 1: 以避免维度改变属性,类似于 img
上的 translate
:
.container {
transition: transform 70ms ease-in;
float: left;
margin: 5px;
}
.container:hover img {
transform: translate(0, -3px);
}
<div class="container">
<img src="https://s28.postimg.org/kagu55chp/csm_632san_Amalfi_Pearl_ca02784e51.jpg" />
</div>
<div class="container">
<img src="https://s24.postimg.org/cdecsntlx/csm_594san_Amalfi_Silver_bbb138a25a.jpg" />
</div>
备选方案 2: box-shadow
:
.container {
transition: transform 70ms ease-in;
float: left;
margin: 5px;
}
.container:hover img {
box-shadow: 0px 0px 5px #888888;
}
<div class="container">
<img src="https://s28.postimg.org/kagu55chp/csm_632san_Amalfi_Pearl_ca02784e51.jpg" />
</div>
<div class="container">
<img src="https://s24.postimg.org/cdecsntlx/csm_594san_Amalfi_Silver_bbb138a25a.jpg" />
</div>
我尝试为某些产品在悬停时做一点缩放效果。为此,我将图像的容器缩小到 95%,并在悬停时也将其缩放到 100%:
但是按比例缩小的图像看起来很模糊。我尝试了有关此主题的其他问题中给出的不同解决方案,例如:backface-visibility、blur(0)、translateZ。但似乎什么都改变不了。
有没有办法让它更漂亮,或者它是否已经达到最佳状态?
.container {
transform: scale(0.95);
transition: transform 70ms ease-in;
float: left;
}
.container:hover {
transform: scale(1);
}
<div class="container">
<img src="https://s28.postimg.org/kagu55chp/csm_632san_Amalfi_Pearl_ca02784e51.jpg" />
</div>
<div class="container">
<img src="https://s24.postimg.org/cdecsntlx/csm_594san_Amalfi_Silver_bbb138a25a.jpg" />
</div>
我认为您的问题与像素插值有关:http://www.cambridgeincolour.com/tutorials/image-interpolation.htm
调整图像大小时,必须调整像素。通过收缩,像素被平均和减少。通过放大,增加了像素,像素之间的平均值填补了空白。
请使用图像编辑器(如 Photoshop 或 Gimpshop)调整图像大小,因为图像程序比网络浏览器更适合此操作。
关于这一点,在浏览器处理插值时,某些百分比比其他百分比效果更好。我注意到它通常是每个季度的那些:减少 25%、50%、75% 和放大 125%、150%、175% 往往比其他数字(如 95% 或 73% 等)处理得更好。 ).
将以下 CSS 添加到您的 img
元素中(不安全 cross-browser-wise):
img {
image-rendering: -moz-crisp-edges; /* Firefox */
image-rendering: -o-crisp-edges; /* Opera */
image-rendering: -webkit-optimize-contrast; /* Webkit (non-standard naming) */
image-rendering: crisp-edges;
-ms-interpolation-mode: nearest-neighbor; /* IE (non-standard property) */
}
下面的片段:
.container {
transform: scale(.95);
transition: transform 70ms ease-in;
float: left;
}
.container:hover {
transform: scale(1);
}
img {
image-rendering: -moz-crisp-edges; /* Firefox */
image-rendering: -o-crisp-edges; /* Opera */
image-rendering: -webkit-optimize-contrast; /* Webkit (non-standard naming) */
image-rendering: crisp-edges;
-ms-interpolation-mode: nearest-neighbor; /* IE (non-standard property) */
}
<div class="container">
<img src="https://s28.postimg.org/kagu55chp/csm_632san_Amalfi_Pearl_ca02784e51.jpg" />
</div>
<div class="container">
<img src="https://s24.postimg.org/cdecsntlx/csm_594san_Amalfi_Silver_bbb138a25a.jpg" />
</div>
备选方案 1: 以避免维度改变属性,类似于 img
上的 translate
:
.container {
transition: transform 70ms ease-in;
float: left;
margin: 5px;
}
.container:hover img {
transform: translate(0, -3px);
}
<div class="container">
<img src="https://s28.postimg.org/kagu55chp/csm_632san_Amalfi_Pearl_ca02784e51.jpg" />
</div>
<div class="container">
<img src="https://s24.postimg.org/cdecsntlx/csm_594san_Amalfi_Silver_bbb138a25a.jpg" />
</div>
备选方案 2: box-shadow
:
.container {
transition: transform 70ms ease-in;
float: left;
margin: 5px;
}
.container:hover img {
box-shadow: 0px 0px 5px #888888;
}
<div class="container">
<img src="https://s28.postimg.org/kagu55chp/csm_632san_Amalfi_Pearl_ca02784e51.jpg" />
</div>
<div class="container">
<img src="https://s24.postimg.org/cdecsntlx/csm_594san_Amalfi_Silver_bbb138a25a.jpg" />
</div>