首页 > 编程知识 正文

vue动态生成前端功能页面,vue css变量 动态

时间:2023-05-06 21:24:51 阅读:171853 作者:4933

用vue制作html页面展示图像。 前几天,在网上看到了在Html页面上展示图像的例子。 正好最近在看vue框架,这个灵感受到了很大的启发。 因此,制作了html页面的展示图像的例子。

具体原理是这样的,首先用canvas在画布上绘制和展示图像,再用getImageData获取图像数据。 得到该数据后,以d*d个方格内的像素为平均值,给出1个div的背景色。 用一系列div组成的矩阵表示这个图像。

下图显示了在第一步中定义vue的子组件,在该子组件中运行所有程序,然后在根组件模板中装载子组件。

导入来自' vue from ' vue '

importpanelfrom './components/child component.vue '

let my=new Vue({ ((

El : ' # APP ',

模板: `

`,

components: {

面板:面板

}

);

这是主门户文件,而Panel是其子组件。

在子组件childcomponent中,用钩子函数mounted取得图像数据信息,将计算出的图像数据d*d领域的像素平均值保存在一个排列中。 pixelsNum是采样图像的区域的宽度和高度,这是我们设定的值。 将此mypixels作为子组件output的属性传递给output。 在output中根据该数据制作html的图像

在childcomponent中

mounted () }

//加载图片并绘制在canvas上

varc=document.getelementsbytagname (' canvas ' ) [0];

var data

varCTX=c.getcontext('2d ' ) )。

var img=new Image (

img.src=require (' ./assets/13.jpg );

img.() nl ) ad=) )={

CTX.drawimage(img,0,0 );

//加载图像后,可以获得每个像素的色值rgb

//获取图像的像素和每个样本的大小

var w=c.width,h=c.height,pixelsNum=this.pixelsNum;

for(vary=0; y

for(varx=0; x

{

data=CTX.getimage data (x * pixelsNum,y*pixelsNum,pixelsNum,pixels num ).data

for(varI=0; I

{

this.pixels.push ({ r : data [ I ]、g:data[i 1]和b:data[i 2]} )

}

data=空;

//console.log ('初始采样数组',this.pixels ) )。

求出//d*d区域的像素平均值,记入数组this.mypixels

var sumr=0,sumg=0,sumb=0

for(varI=0; I

{

sumb=this.pixels[i].b;

sumg=this.pixels[i].g;

sumr=this.pixels[i].r;

}

this.pixels=[];

this.mypixels.push({ ((

r : math.round (sumr/pixels num/pixels num ),

g : math.round (sumg/pixels num/pixels num ),

b : math.round (sumb/pixels num/pixels num ) )。

() )

}

}

(,

在childcomponent的模板中,使output的各行的div数与原始图像的各行的采样数一致。 将output的宽度定义为每个div的宽度*样本数,避免了与各行各列数据对应的图像偏移。

在Output中

class='output '

在组件output的methods中定义方法myrgb,将数组内的数据按照index连接成css颜色字符串形式' RGB(a,b,c ) '

methods:{

myRGB(I ) {

return'RGB(this.Pixels[I].r ','

this.pixels[i].g ','

this.pixels[i].b ' ) ';

}

最后的效果图如下

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。