CSS旋转变换使图像模糊

Posted

技术标签:

【中文标题】CSS旋转变换使图像模糊【英文标题】:CSS rotate transform makes image blurry 【发布时间】:2016-09-08 13:16:10 【问题描述】:

我使用 CSS 变换旋转和缩放创建了一个八边形剪裁样式,如下面的代码 sn-p。

但是,在 El Capitan 上查看 Chrome 52.0.2743.116(64 位)时,图像看起来很模糊。相反,图像在 Firefox 中看起来很清晰。

我尝试过backface-visibility: hidden; transform: translateZ(0); filter: blur(0); image-rendering: -webkit-optimize-contrast;等各种解决方案。然而图像仍然模糊。

我可以使用任何特定于 webkit 的规则来解决这个问题吗?

div.octagon 
  display: inline-block;
  position: relative;
  overflow: hidden;
  -webkit-transform: rotate(22.5deg) scale(0.9) translateY(-4px) translateZ(0);
  -moz-transform: rotate(22.5deg) scale(0.9) translateY(-4px) translateZ(0);
  -ms-transform: rotate(22.5deg) scale(0.9) translateY(-4px) translateZ(0);
  -o-transform: rotate(22.5deg) scale(0.9) translateY(-4px) translateZ(0);
  transform: rotate(22.5deg) scale(0.9) translateY(-4px) translateZ(0);
  margin-top: 1em;
  margin-bottom: 1em;

div.octagon > * 
  position: relative;
  overflow: hidden;
  -webkit-transform: rotate(45deg);
  -moz-transform: rotate(45deg);
  -ms-transform: rotate(45deg);
  -o-transform: rotate(45deg);
  transform: rotate(45deg);
  background: transparent;
  border: 4px solid;
  margin: 0;
  background-color: black;

div.octagon > *:after 
  position: absolute;
  /* There needs to be a negative value here to cancel
       * out the width of the border. It's currently -3px,
       * but if the border were 5px, then it'd be -5px.
       */
  top: -4px;
  right: -4px;
  bottom: -4px;
  left: -4px;
  -webkit-transform: rotate(45deg);
  -moz-transform: rotate(45deg);
  -ms-transform: rotate(45deg);
  -o-transform: rotate(45deg);
  transform: rotate(45deg);
  content: '';
  border: inherit;

div.octagon > * > img 
  display: block;
  -webkit-transform: rotate(-67.5deg) scale(1.1) translateZ(0);
  -moz-transform: rotate(-67.5deg) scale(1.1) translateZ(0);
  -ms-transform: rotate(-67.5deg) scale(1.1) translateZ(0);
  -o-transform: rotate(-67.5deg) scale(1.1) translateZ(0);
  transform: rotate(-67.5deg) scale(1.1) translateZ(0);
  max-width: 100%;
  height: auto;
  image-rendering: -webkit-optimize-contrast;

.col-6 
  display: inline-block;
  width: 49%;

.col-6 > .octagon 
  width: 100%;
<div class="col-6">
  <div class="octagon">
    <p>
      <img src="https://placeimg.com/300/300/people"   />
    </p>
  </div>
</div>

<div class="col-6">
  <img src="https://placeimg.com/300/300/people"   />
</div>

【问题讨论】:

你试过transform: perspective(1px) rotate(45deg);吗? .... 或者在父级上设置transform-style: preserve-3d; 我都试过了,还是没用。 请注意,如果您拍摄 300x300 的照片并将其放大到 500x500,无论有没有transform,它都会变得模糊。而是使用更大的原件并将其缩小,您就不会遇到这个问题 【参考方案1】:

我刚刚在我的 comp 上测试了这个,当我应用像素化图像渲染而不是 -webkit-optimize-contrast 时,它看起来更好。

div.octagon > * > img 
  image-rendering: pixelated;

【讨论】:

以上是关于CSS旋转变换使图像模糊的主要内容,如果未能解决你的问题,请参考以下文章

CSS3 变换:旋转;在 IE9 中

3D图像旋转CSS [关闭]

CSS 动画:曲线箭头

CSS变换旋转回来

变换上的 CSS3 动画:旋转。获取旋转元素当前度数的方法?

如何使图像围绕静态徽标旋转?