兔子过大年——识别图片画兔

139 阅读3分钟

我正在参加「兔了个兔」创意投稿大赛,详情请看:「兔了个兔」创意投稿大赛

兔子过大年——识别图片画兔

年岁初始,元气初旦。

我们期待生活中一切无恙,万事如意。

就像初升的阳光一样明媚,

这次带来的是利用CSS和JS结合实现的自适应图片后画出的一只大白兔:先放效果

image-20230115124249685

底版是插入的html图片,上层的虚影是根据输入的图片画出的兔子轮廓

布局

对于CSS和JS的简单结合,我们可以把他理解为一个能够在浏览器里面跑的Word,只不过他和Word最大的差别就在于可以使用超链接Hyper-link在文档之间做跳转。由于不同浏览器或者页面布局的不同,导致其出现的大小结构会造成差异。

在做这个demo的基础是,先在body内插入一张图片,这里是为了庆祝兔年,用一只可爱的小兔子打底:

animal

然后根据兔子的外部特征分别用线条进行勾勒

其中的细节都放在CSS中:

.container {
    width: 470px;
    height: 300px;
    margin: 0 auto;
    position: relative;
    opacity: 0.4;
}
​
/*body*/
.animal-body {
    width: 314px;
    margin: 244px auto;
    height: 153px;
    border: 3px solid #000;
    border-top-left-radius: 200px;
    border-top-right-radius: 211px;
    z-index: 1;
    position: relative;
    border-bottom: 0;
}
​
.animal-body:after {
...}
​
/*ear*/
.right-ear {
    border-top-left-radius: 50%;
    border-top-right-radius: 50%;
    width: 51px;
    height: 89px;
    border: 4px solid #000000;
    position: absolute;
    left: 180px;
    top: -46px;
    border-bottom: 0;
    transform: rotate(12deg);
    background-color: #fff;
    z-index: 1;
}
​
.right-ear:after {
  ...
}
​
.left-ear {
    ...
}
​
.left-ear:after {
   ...
}
​
/*eye*/
.right-eye {
    ...
}
​
.right-eye:after {
...
}
​
.left-eye {
    ...
}
​
.left-eye:after {
    ...
}
​
/*node*/
.nose-left {
    width: 14px;
    height: 14px;
    border: 3px solid #000;
    border-top: 0;
    border-right: 0;
    border-bottom-left-radius: 50%;
    position: absolute;
    bottom: 79px;
    left: 163px;
    transform: rotate(-17deg);
}
​
.nose-right {
    ...
}
​
/*tail*/
.tail {
    width: 35px;
    height: 22px;
    background-color: #fff;
    border-top-left-radius: 25px;
    border-top-right-radius: 25px;
    border: 3px solid #000;
    border-bottom: 0;
    position: absolute;
    top: 44px;
    right: 67px;
    transform: rotate(87deg);
}
​
.tail:before {
   ...
}

注意:

在勾勒框图时:为了避免图片溢出:我们可以

使用object-fit时,替换元素(视频,图)可以以多种方式被调整到合乎盒子的大小。

使用object-fit时,一定要有img元素的尺寸百分百。否则object-fit不生效。

且为了图片可以更加适配其他用户打开时的情况,推荐使用矢量图标: 好处:矢量图使用算法定义 — 一个矢量图文件包含了图形和路径的定义。 SVG 格式可以创造用于 Web 的精彩的矢量图形,而且放大网页不会模糊

矢量图的定义——SVG

  • SVG 是用于描述矢量图像的XML语言, SVG用于标记图形,而不是内容。
  • SVG 指可伸缩矢量图形。
  • XML 是可扩展标记语言是由 W3C 指定的一种通用标记语言。
  • XML 标签 类似 HTML 标签,但 XML 允许用户定义自己的标签。

好啦,本次的分享暂且到这,祝各位新年快乐鸭