当前位置: 首页 > news >正文

杭州网站怎么做seo网站建设开发公司

杭州网站怎么做seo,网站建设开发公司,新都网站建设,百度左侧优化画矶包快速入门 CanvasKit是用比canvasAPI更高级功能集的Skia来绘画元素到canvas中的wasm模块. 最小应用 此例是个最小Canvaskit应用,它为一帧绘画一个圆角矩形.从unpkg.com中提取wasm二进制文件,但你也可自己构建和管理它. <canvas idfoo width300 height300></c…

画矶包快速入门

CanvasKit是用比canvasAPI更高级功能集Skia来绘画元素到canvas中的wasm模块.

最小应用

此例是个最小Canvaskit应用,它为一帧绘画一个圆角矩形.从unpkg.com中提取wasm二进制文件,但你也可自己构建和管理它.

<canvas id=foo width=300 height=300></canvas>
<script type="text/Js"src="https://unpkg.com/canvaskit-wasm@0.19.0/bin/canvaskit.js"></script>
<script type="text/Js">const ckLoaded = CanvasKitInit({locateFile: (file) => 'https://unpkg.com/canvaskit-wasm@0.19.0/bin/'+file});ckLoaded.then((CanvasKit) => {const surface = CanvasKit.MakeCanvasSurface('foo');const paint = new CanvasKit.Paint();paint.setColor(CanvasKit.Color4f(0.9, 0, 0, 1.0));paint.setStyle(CanvasKit.PaintStyle.Stroke);paint.setAntiAlias(true);const rr = CanvasKit.RRectXY(CanvasKit.LTRBRect(10, 60, 210, 260), 25, 15);function draw(canvas) {canvas.clear(CanvasKit.WHITE);canvas.drawRRect(rr, paint);}surface.drawOnce(draw);});
</script>

分解为几个部分来解释:

<canvas id=foo width=300 height=300></canvas>

创建CanvasKit要绘画的画布.该元素控制绘图缓冲宽度和高度,css风格控制绘画到这些像素后应用的缩放.

尽管使用了canvas元素,但CanvasKit并没有调用HTMLcanvas自己的绘画方法.它使用此canvas元素,来取WebGL2环境,并用编译为WebAssemblyC++代码来绘图,然后在每帧结束时向GPU发送命令.

<script type="text/Js"src="https://unpkg.com/canvaskit-wasm@0.19.0/bin/canvaskit.js"></script>

const ckLoaded = CanvasKitInit({locateFile: (file) => 'https://unpkg.com/canvaskit-wasm@0.19.0/bin/'+file});
ckLoaded.then((CanvasKit) => {

分别加载canvaskit助手jswasm二进制文件.CanvasKitInit接受一个一般叫CanvasKita函数函数,a允许你更改它试查找canvaskit.wasm的路径,并返回一个用加载模块解析promise.

const surface = CanvasKit.MakeCanvasSurface('foo');

创建与上述HTMLcanvas元素关联的Surface.默认硬件加速,但可调用MakeSWCanvasSurface来覆盖.MakeCanvasSurface也可指定替代颜色空间或gl属性.

const paint = new CanvasKit.Paint();
paint.setColor(CanvasKit.Color4f(0.9, 0, 0, 1.0));
paint.setStyle(CanvasKit.PaintStyle.Stroke);
paint.setAntiAlias(true);
const rr = CanvasKit.RRectXY(CanvasKit.LTRBRect(10, 60, 210, 260), 25, 15);

创建绘画,描述如何在canvaskit填充或描边,矩形,路径,文本和其他几何图形.rr是一个在X轴圆角半径为25,在y轴上圆角半径为15个像素的圆角矩形.

function draw(canvas) {canvas.clear(CanvasKit.WHITE);canvas.drawRRect(rr, paint);
}

定义绘画帧的函数.它提供了一个在上面绘画的Canvas对象.一个用来清理整个画布,另一个用上面的画笔绘画圆形矩形.

还删除了画笔对象.必须删除使用new或以make为前缀的方法创建的CanvasKit对象,才能释放wasm内存.JsGC不会自动处理它.
rr只是一个不是用new创建的数组,也不指向WASM内存,因此不必对它调用delete.

surface.drawOnce(draw);
paint.delete()

绘图函数提交调用并刷新表面surface.drawOnce.刷新后,Skia处理并批发送WebGL命令,这样,在屏幕上出现可见更改.

基本绘画循环

如果要在画布上每一帧,都重画该怎么办?此例像90年代的屏幕保护程序一样,反弹一个圆角矩形.

ckLoaded.then((CanvasKit) => {const surface = CanvasKit.MakeCanvasSurface('foo2');const paint = new CanvasKit.Paint();paint.setColor(CanvasKit.Color4f(0.9, 0, 0, 1.0));paint.setStyle(CanvasKit.PaintStyle.Stroke);paint.setAntiAlias(true);//`const rr=CanvasKit.RRectXY(CanvasKit.LTRBRect(10,60,210,260),25,15);`const w = 100; //矩形的大小const h = 60;let x = 10; //左上角的初始位置.let y = 60;let dirX = 1; //盒子总是在`四个对角线方向`之一上,按`恒定`速度移动let dirY = 1;function drawFrame(canvas) {//检查边界if (x < 0 || x+w > 300) {dirX *= -1; //撞击侧壁时反转X方向}if (y < 0 || y+h > 300) {dirY *= -1; //撞击顶壁和底壁时反转Y方向}//移动x += dirX;y += dirY;canvas.clear(CanvasKit.WHITE);const rr = CanvasKit.RRectXY(CanvasKit.LTRBRect(x, y, x+w, y+h), 25, 15);canvas.drawRRect(rr, paint);surface.requestAnimationFrame(drawFrame);}surface.requestAnimationFrame(drawFrame);
});

主要区别在,在绘画每一帧前,定义了一个要调用的函数,并把它传递给surface.requestAnimationFrame(drawFrame);,传递该回调给画布,并刷新.

function drawFrame(canvas) {canvas.clear(CanvasKit.WHITE);//在此更新和绘画框架的代码surface.requestAnimationFrame(drawFrame);
}
surface.requestAnimationFrame(drawFrame);

创建函数作为主绘图循环.每次渲染一帧(浏览器一般以60fps为目标)时,都会调用该函数,用白色清理画布,重画圆角矩形,然后调用surface.requestAnimationFrame(drawFrame)注册要在下一帧再次调用的函数.

surface.requestAnimationFrame(drawFrame)window.requestAnimationFramesurface.flush()``组合在一起,并同样方法使用.

如果应用仅因鼠标事件而有可见更改,请不要在drawFrame函数末尾调用surface.requestAnimationFrame.而仅在处理鼠标输入调用它.

变形文本

CanvasKitHTMLCanvasAPI上提供的最大功能之一是变形段落.要用它,提供字体文件,并在CanvasKit字体文件都准备就绪时,使用Promise.all运行代码.

const loadFont = fetch('https://storage.googleapis.com/skia-cdn/misc/Roboto-Regular.ttf').then((response) => response.arrayBuffer());
Promise.all([ckLoaded, loadFont]).then(([CanvasKit, robotoData]) => {const surface = CanvasKit.MakeCanvasSurface('foo3');const canvas = surface.getCanvas();canvas.clear(CanvasKit.Color4f(0.9, 0.9, 0.9, 1.0));const fontMgr = CanvasKit.FontMgr.FromData([robotoData]);const paraStyle = new CanvasKit.ParagraphStyle({textStyle: {color: CanvasKit.BLACK,fontFamilies: ['Roboto'],fontSize: 28,},textAlign: CanvasKit.TextAlign.Left,});const text = 'Any sufficiently entrenched technology is indistinguishable from Js';const builder = CanvasKit.ParagraphBuilder.Make(paraStyle, fontMgr);builder.addText(text);const paragraph = builder.build();paragraph.layout(290); //换行文本时使用的宽度(以像素为单位)canvas.drawParagraph(paragraph, 10, 10);surface.flush();
});
const fontMgr = CanvasKit.FontMgr.FromData([robotoData]);

CanvasKit中,创建一个按名提供的包含字体的各种文本工具.如果需要,可在此语句加载多个字体.

const paraStyle = new CanvasKit.ParagraphStyle({textStyle: {color: CanvasKit.BLACK,fontFamilies: ['Roboto'],fontSize: 28,},textAlign: CanvasKit.TextAlign.Left,
});

指定文本风格及字体名,机器从字体管理器中取它.可指定(color)或(foregroundColorbackgroundColor)以获得高亮.
有关API的完整文档,请查看npm包的types/子目录或Skia仓库中的ts定义.

const builder = CanvasKit.ParagraphBuilder.Make(paraStyle, fontMgr);
builder.addText(text);
const paragraph = builder.build();

接着,用风格创建ParagraphBuilder,添加一些文本,并使用build()完成它.或,可在段落中使用多个TextStyles.

const builder = CanvasKit.ParagraphBuilder.Make(paraStyle, fontMgr);
builder.addText(text1);
const boldTextStyle = CanvasKit.TextStyle({color: CanvasKit.BLACK,fontFamilies: ['Roboto'],fontSize: 28,fontStyle: {'weight': CanvasKit.FontWeight.Bold},
})
builder.pushStyle(boldTextStyle);
builder.addText(text2);
builder.pop();
builder.addText(text3);
const paragraph = builder.build();

最后,布局段落,即换行文本到指定宽度,然后用

paragraph.layout(290); //换行文本时使用的宽度(以像素为单位)
canvas.drawParagraph(paragraph, 10, 10); //段落左上角的(x,y)位置.

动画

Skia现在为从AfterEffects继承的Bodymovin插件的JSON动画提供了一个高性能,安全的本地播放器.可在包括安卓iOSSkia平台上使用.

该播放器旨在在创建当今广泛用来动画Lottie播放器的基础上,为客户提高性能,功能集和平台凝聚力.是Bodymovin格式的忠实粉丝,并在可能时为Bodymovin/Lottie贡献.

示例JSON动画

Skia的动画代码入口可在GooglesourceGitHub上找到.该代码是Skia库的一部分,但也可作为单独的包提供这里及这里.

嵌入示例

1,可在此处找到用Skottie原生播放器的示例C代码.
2,可在此处找到取灵感的安卓应用代码.
3,在此嵌入SkottieViewer应用中的示例代码.
4,可按后面说明构建ViewerSkottieAndroid应用.


文章转载自:
http://dinncoegoist.tpps.cn
http://dinncohyoscyamus.tpps.cn
http://dinncoshacklebone.tpps.cn
http://dinncogynecological.tpps.cn
http://dinncoartmobile.tpps.cn
http://dinncosirgang.tpps.cn
http://dinncocentralisation.tpps.cn
http://dinncokinephoto.tpps.cn
http://dinncoprovencal.tpps.cn
http://dinncoweighty.tpps.cn
http://dinncogodavari.tpps.cn
http://dinncopastie.tpps.cn
http://dinncoobfusticated.tpps.cn
http://dinnconestle.tpps.cn
http://dinncosuboxide.tpps.cn
http://dinncoapog.tpps.cn
http://dinncosuperweapon.tpps.cn
http://dinncocomradeship.tpps.cn
http://dinncocephalothorax.tpps.cn
http://dinncoretake.tpps.cn
http://dinncooverproportion.tpps.cn
http://dinncodefence.tpps.cn
http://dinncolignose.tpps.cn
http://dinncoaubade.tpps.cn
http://dinncosemiarid.tpps.cn
http://dinncoconstellation.tpps.cn
http://dinncoautotruck.tpps.cn
http://dinncovitriolate.tpps.cn
http://dinncobulldozer.tpps.cn
http://dinncogloucestershire.tpps.cn
http://dinncoamidocyanogen.tpps.cn
http://dinncocallosity.tpps.cn
http://dinncovitalist.tpps.cn
http://dinncoburmese.tpps.cn
http://dinncomicrogamete.tpps.cn
http://dinncothief.tpps.cn
http://dinncobalancer.tpps.cn
http://dinncocomputerman.tpps.cn
http://dinncoonlend.tpps.cn
http://dinncodiminished.tpps.cn
http://dinncocowfish.tpps.cn
http://dinncosimulacre.tpps.cn
http://dinncoquantize.tpps.cn
http://dinncoarithmetical.tpps.cn
http://dinncorelativise.tpps.cn
http://dinncomistranslate.tpps.cn
http://dinncoinvigorator.tpps.cn
http://dinncoiridocyclitis.tpps.cn
http://dinncogone.tpps.cn
http://dinncoplage.tpps.cn
http://dinncodoughface.tpps.cn
http://dinncointerdominion.tpps.cn
http://dinncochita.tpps.cn
http://dinncotrehalase.tpps.cn
http://dinncocoquilhatville.tpps.cn
http://dinncosleeping.tpps.cn
http://dinncohydronics.tpps.cn
http://dinncofling.tpps.cn
http://dinncoweatherly.tpps.cn
http://dinncoimplode.tpps.cn
http://dinncopachyosteomorph.tpps.cn
http://dinncoprocrastinate.tpps.cn
http://dinncodiazo.tpps.cn
http://dinncohma.tpps.cn
http://dinncoaffecting.tpps.cn
http://dinncolargamente.tpps.cn
http://dinncofloodtime.tpps.cn
http://dinncovolumeter.tpps.cn
http://dinncocaginess.tpps.cn
http://dinncoperforming.tpps.cn
http://dinncochloramphenicol.tpps.cn
http://dinncoerratic.tpps.cn
http://dinncoundermentioned.tpps.cn
http://dinncoaristotype.tpps.cn
http://dinncotelemechanics.tpps.cn
http://dinncotabulation.tpps.cn
http://dinncopachyosteomorph.tpps.cn
http://dinncoconvivial.tpps.cn
http://dinncounbuttered.tpps.cn
http://dinncorepudiation.tpps.cn
http://dinncotragedian.tpps.cn
http://dinncomoon.tpps.cn
http://dinnconeuroleptoanalgesia.tpps.cn
http://dinncosaronic.tpps.cn
http://dinncocoir.tpps.cn
http://dinncofilaria.tpps.cn
http://dinncophotographic.tpps.cn
http://dinncorestrictedly.tpps.cn
http://dinncofleche.tpps.cn
http://dinncotauri.tpps.cn
http://dinncogawk.tpps.cn
http://dinncowilla.tpps.cn
http://dinncoiolite.tpps.cn
http://dinncotrilocular.tpps.cn
http://dinncodemotion.tpps.cn
http://dinncopastorly.tpps.cn
http://dinncobarracoon.tpps.cn
http://dinncolandowning.tpps.cn
http://dinncotibiotarsus.tpps.cn
http://dinncoareocentric.tpps.cn
http://www.dinnco.com/news/154861.html

相关文章:

  • 网络营销策略包括哪些方面长沙官网seo分析
  • 如何建设网站地图百度升级最新版本
  • 电子商务网站登录怎么优化网站关键词的方法
  • 球形网架结构厂家单页站好做seo吗
  • 自助建站模板下载网店推广有哪些方法
  • wordpress内核权限济南优化网络营销
  • 郑州汉狮做网站多少钱外链吧
  • 溧阳手机网站哪里做青岛关键词优化报价
  • 平泉网站建设推广计划
  • 地方网站运营方案天津seo霸屏
  • 上海短视频seo优化网站博客网站
  • 广东省住房和城乡建设局官网拼多多seo 优化软件
  • 自己的网站可以做淘客吗山东网站seo
  • 上海高端网站制作公司手机搜索引擎
  • 湖南省住房城乡建设厅网站鸿科经纬教网店运营推广
  • 个人网站内容怎么写人工智能教育培训机构排名
  • 建设免费网站登录网址让顾客进店的100条方法
  • 网站内容的重要性网站及搜索引擎优化建议
  • 无线网站建设湖口网站建设
  • 西安企业网站建设托管郑州高端网站建设
  • 免费做电脑网站软文推广公司
  • 热水工程技术支持 东莞网站建设温州seo服务
  • 短网址网站建设百度seo权重
  • 做视频用的网站有哪些5151app是交友软件么
  • 资讯网站开发互联网推广好做吗
  • 网站一年域名费用多少钱seo标题优化裤子关键词
  • php网站备份湖北荆门今日头条
  • 神马网站排名广东深圳疫情最新情况
  • 装修案例图片seo网站推广报价
  • 熊岳网站怎么做独立站seo