因此,您可以通过执行以下操作在CSS中获得像素化:
background-image
设置为非常小的图像(例如50px或100px)。image-rendering: pixelated
。那会给你像素化的外观。
现在,我想通过在浏览器完成下载后用大图像替换“非常小的图像”来对此进行动画处理:
let img = new Image()
img.src = largeVersion
img.onload = function(){
// set css background-image to the new image perhaps, not sure...
}
这个问题有两个方面。
background-image
使background-size: cover
正确地填充容器元素。因此,您不能在任何像素化动画中使用背景大小。transform: scale(0.1)
(接近原始像素大小)不起作用,因为它会缩放整个元素。我想做这样的事情:在transform: scale(x)
上设置动画,以在0.3或0.5秒内从50px像素化图像变为2000px非像素化图像。但这是行不通的。我以为可能使用背景尺寸,但是由于限制而无法使用。
想知道是否有任何方法可以做到这一点。
我看过this使用画布进行像素化。想知道是否没有其他解决方案不使用JS / canvas就行。
<style>
div {
background-size: cover;
background-repeat: no-repeat;
background-position: center center;
}
</style>
<div style='background-image: url(/100px.jpg)'></div>
答案 0 :(得分:1)
您可以使用svg滤镜进行像素化。
然后可以为滤镜设置动画。
要在div背景上使用过滤器,您只需过滤:url(#filterid)
放在一起,看起来像这样:
#myDiv::before{
content:"";
position:absolute;
top:0;
left:0;
width:100%;
height:100%;
filter:url(#pixelate);
background-size:cover;
background-image:url(https://images.unsplash.com/photo-1475724017904-b712052c192a?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=2850&q=80)
}
#myDiv {
position:relative;
width:350px;
height:250px;
}
.inside {
position: relative;
}
<div id="myDiv"> <div class="inside"><h1>Hello</h1></div> </div>
<svg>
<filter id="pixelate" x="0" y="0">
<feFlood x="4" y="4" height="1" width="1" />
<feComposite id="composite1" width="10" height="10" />
<feTile result="a" />
<feComposite in="SourceGraphic" in2="a" operator="in" />
<feMorphology id="morphology" operator="dilate" radius="5" />
</filter>
<animate xlink:href="#composite1" id="anim-width"
attributeName="width" from="40" to="10" dur=".8s"
fill="freeze" />
<animate xlink:href="#composite1" id="anim-height"
attributeName="height" from="40" to="10" dur=".8s"
fill="freeze" />
<animate xlink:href="#morphology" id="anim-radius"
attributeName="radius" from="20" to="5" dur=".8s"
fill="freeze"/>
</svg>
请注意,我必须创建一个内部div并将背景应用于伪元素::before
上,但是当backdrop-filter
的支持得到改善时,很快就不需要了。
参考:
像素化svg效果:https://codesandbox.io/s/km3opvn6yv
制作svg过滤器动画:https://codepen.io/chriscoyier/pen/dPRVqL
背景过滤器:https://developer.mozilla.org/en-US/docs/Web/CSS/backdrop-filter