亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > HTML > 正文

HTML5中通過li-canvas輕松實現(xiàn)單圖、多圖、圓角圖繪制,單行文字、多行文字等

2024-08-26 00:21:11
字體:
供稿:網(wǎng)友

Html5新增的canvas是個強大的功能, 估計大家平時都會用到,只是頻率不高,偶爾用它合成圖片,但是如果不進行封裝的話,代碼會很亂,所以對canvas常用的畫圖、繪制文字、保存功能進行了封裝,目前還比較滿意,能夠快速完成canvas繪圖任務(wù),從容應(yīng)對需求變更,只需進行簡單配置即可。

li-canvas.js

對Html5的canvas功能進行了封裝,方便進行單圖、多圖繪制、圓角圖片繪制、多行文字繪制、自動換行、圖片保存下載等功能.

github地址: github.com/501351981/l…

主要功能

•圖片繪制:單圖/多圖繪制、圓角圖片繪制. •文字繪制:多段文字繪制、自動換行. •圖片保存:獲取圖片數(shù)據(jù)、下載圖片到本地,支持自定義下載圖片名.

npm安裝

# npm 安裝npm install --save li-canvas

直接引用

在html中直接引入js文件.

<script src="dist/li-canvas.js"></script>

如何使用

實例化

使用li-canvas時需要先實例化對象,new LiCanvas(canvas_id,options),傳入canvas的id,options選填,可以設(shè)置canvas背景和默認文字樣式等  

...    <script src="../dist/li-canvas.js"></script>    ...<body><canvas id="test" width="1563" height="1180"></canvas><script> var canvas=new LiCanvas('test') </script></body>    ...

圖片繪制

•繪制單張圖片

調(diào)用addDrawImageTask(image),其中參數(shù)image是一個對象,包括

src:圖片的url地址

x:圖片在canvas畫布上的左上角x坐標

y:圖片在canvas畫布上的左上角y坐標

width:圖片繪制寬度

height:圖片繪制高度

borderRadius:圖片圓角半徑

調(diào)用addDrawImageTask(image)時,并沒有立即繪制圖片,而是添加了一個繪圖任務(wù),只有調(diào)用draw(callback)時,才執(zhí)行繪圖任務(wù),執(zhí)行完成調(diào)用callback回調(diào)函數(shù)

為什么這么做呢?因為圖片繪制的時候需要先下載圖片,這是個異步操作,所以先添加到任務(wù)列表,調(diào)用draw()的時候再按照任務(wù)添加順序依次執(zhí)行  

...    <script src="../dist/li-canvas.js"></script>    ...<body><canvas id="test" width="1563" height="1180" style="width: 782px;height: 590px;border: 1px solid red"></canvas><img src="./bg.jpg" id="img" width="0" height="0"><script> var bg={        src:document.getElementById('img').src,//或者圖片的url地址        x:0,//左上角的x坐標        y:0,//左上角的y坐標        width:1563,//圖片繪制寬度        height:1180,//圖片繪制高度        borderRadius:0 //圖片圓角半徑    }    var canvas=new LiCanvas('test')    canvas.addDrawImageTask(bg)  //添加繪圖任務(wù),并沒有立即進行繪圖    canvas.draw(()=>{       console.log("繪制完成")    }) </script></body>    ...

•繪制多圖

可以連續(xù)多次調(diào)用addDrawImageTask(image),也可以傳圖一個數(shù)組  

...    <script src="../dist/li-canvas.js"></script>    ...<body><canvas id="test" width="1563" height="1180" style="width: 782px;height: 590px;border: 1px solid red"></canvas><script> var img1={        src:"http://*****.com/***.png",        x:0,        y:0,        width:1563,        height:1180,        borderRadius:0    }    var img2={            src:"http://*****.com/***.png",            x:0,            y:0,            width:1563,            height:1180,            borderRadius:0     }    var imgs=[        {             src:"http://*****.com/***.png",             x:0,             y:0,             width:100,             height:100,             borderRadius:0        },        {             src:"http://*****.com/***.png",             x:0,             y:0,             width:100,             height:100,             borderRadius:0        }    ]    var canvas=new LiCanvas('test')    canvas.addDrawImageTask(img1)    canvas.addDrawImageTask(img2)   //多次調(diào)用實現(xiàn)多圖繪制    canvas.addDrawImageTask(imgs)   //直接傳入一個數(shù)組也可以實現(xiàn)多圖繪制    canvas.draw(()=>{       console.log("繪制完成")    }) </script></body>    ...

•繪制圓角或圓形圖片

只需要設(shè)置borderRadius即可  

...    <script src="../dist/li-canvas.js"></script>    ...<body><canvas id="test" width="1563" height="1180" style="width: 782px;height: 590px;border: 1px solid red"></canvas><script> var img1={        src:"http://*****.com/***.png",        x:0,        y:0,        width:100,        height:100,        borderRadius:50  //設(shè)置圓角半徑,當圓角半徑為正方形邊長一半時,就是一個圓形了    }    var canvas=new LiCanvas('test')    canvas.addDrawImageTask(img1)    canvas.draw(()=>{       console.log("繪制完成")    }) </script></body>    ...

繪制文字

•繪制一段文字

調(diào)用addDrawTextTask(text,style)

text:要繪制的文字

style:文字樣式,包括 x:文字繪制起始位置左上角坐標x

   y:文字繪制其實位置左上角坐標y

   width:文字一行的寬度,超出會自動進行換行

   fontSize:文字大小,整數(shù),單位為px

   fontWeight:文字粗細bold、bolder等或者400,500,600...同css的font-weight

   fontFamily:文字字體,同css

   lineHeight:行高,整數(shù),單位px

   color:顏色

   marginBottom:如果有多段文字,還可以指定段落之間的距離

文字繪制,同樣是異步的,知道調(diào)用draw(callback)才真正進行繪制

...    <script src="../dist/li-canvas.js"></script>    ...<body><canvas id="test" width="1563" height="1180" style="width: 782px;height: 590px;border: 1px solid red"></canvas><script> var canvas=new LiCanvas('test')   canvas.addDrawTextTask("要繪制的文字",{           x:110,           y:496,           width:1340,           fontSize:54,           fontWeight:'bolder',           fontFamily:"PingFangSC-Regular,'Microsoft YaHei',SimSun,Arial,'Helvetica Neue',sans-serif",           lineHeight:70,           color:'#1a1a1a',           marginBottom:40   })    canvas.draw(()=>{          console.log("繪制完成")       }) </script></body>    ...

•繪制多段文字

方法1:反復(fù)調(diào)用addDrawTextTask(text,style),同上

方法2:text可以傳入一個數(shù)組,可以共用style

...    <script src="../dist/li-canvas.js"></script>    ...<body><canvas id="test" width="1563" height="1180" style="width: 782px;height: 590px;border: 1px solid red"></canvas><script> var canvas=new LiCanvas('test')   canvas.addDrawTextTask(["要繪制的文字段落1","要繪制的文字段落2"],{           x:110,           y:496,           width:1340,           fontSize:54,           fontWeight:'bolder',           fontFamily:"PingFangSC-Regular,'Microsoft YaHei',SimSun,Arial,'Helvetica Neue',sans-serif",           lineHeight:70,           color:'#1a1a1a',           marginBottom:40   })    canvas.draw(()=>{          console.log("繪制完成")       }) </script></body>    ...

其中style也可以在對象實例化的時候傳入一個默認值,避免反復(fù)設(shè)置一些共用的style

...    <script src="../dist/li-canvas.js"></script>    ...<body><canvas id="test" width="1563" height="1180" style="width: 782px;height: 590px;border: 1px solid red"></canvas><script> var canvas=new LiCanvas('test',{       fontStyle:{           fontSize:20,           fontFamily:"PingFangSC-Regular,'Microsoft YaHei',SimSun,Arial,'Helvetica Neue',sans-serif",           lineHeight:70,           color:'#1a1a1a',           marginBottom:40       }   })   canvas.addDrawTextTask("要繪制的文字段落1",{           x:110,           y:496,           width:1340,   })   canvas.addDrawTextTask("要繪制的文字段落2",{              x:110,              y:696,              width:1340,      })    canvas.draw(()=>{          console.log("繪制完成")       }) </script></body>    ...

如果多段文字中,有一段的文字需要設(shè)置不同的樣式,也可以單獨指定樣式,如下, 是不是很靈活~

...    <script src="../dist/li-canvas.js"></script>    ...<body><canvas id="test" width="1563" height="1180" style="width: 782px;height: 590px;border: 1px solid red"></canvas><script> var canvas=new LiCanvas('test',{       fontStyle:{           fontSize:20,           fontFamily:"PingFangSC-Regular,'Microsoft YaHei',SimSun,Arial,'Helvetica Neue',sans-serif",           lineHeight:70,           color:'#1a1a1a',           marginBottom:40       }   })   canvas.addDrawTextTask([{       text:"要繪制的段落文字1",       fontSize:60   },"要繪制的文字段落2","要繪制的文字段落3"],{           x:110,           y:496,           width:1340,   })   canvas.draw(()=>{          console.log("繪制完成")   }) </script></body>    ...

保存下載圖片

•下載圖片

下載為png圖片:saveToPng("文件名")

下載為jpeg圖片:saveToJpeg("文件名")

下載為gif圖片:saveToGif("文件名")

注意:下載圖片必須在draw()的回調(diào)函數(shù)中調(diào)用才可以生效

...    <script src="../dist/li-canvas.js"></script>    ...<body><canvas id="test" width="1563" height="1180" style="width: 782px;height: 590px;border: 1px solid red"></canvas><script> var bg={        src:"http://***.jpg",        x:0,        y:0,        width:1563,        height:1180,        borderRadius:0    }    var canvas=new LiCanvas('test')    canvas.addDrawImageTask(bg)    canvas.draw(()=>{       canvas.saveToPng("li-canvas")    }) </script></body>    ...

•獲取圖片數(shù)據(jù)

有時候,我們并不想下載圖片,比如在微信瀏覽器中,我們其實是希望用戶長按圖片保存,此時,我們希望canvas合成的圖片數(shù)據(jù),插入到img的src中

調(diào)用:getImageData()可以獲取合成的圖片數(shù)據(jù)  

...    <script src="../dist/li-canvas.js"></script>    ...<body><canvas id="test" width="1563" height="1180" style="width: 782px;height: 590px;border: 1px solid red"></canvas><img src="./bg.jpg" id="img" ><script> var bg={        src:"http://***.jpg",        x:0,        y:0,        width:1563,        height:1180,        borderRadius:0    }    var canvas=new LiCanvas('test')    canvas.addDrawImageTask(bg)    canvas.draw(()=>{       var src=canvas.getImageData()       document.getElementById('img').src=src    }) </script></body>    ...

github地址: github.com/501351981/l…  

總結(jié)

以上所述是小編給大家介紹的HTML5中通過li-canvas輕松實現(xiàn)單圖、多圖、圓角圖繪制,單行文字、多行文字等,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對VeVb武林網(wǎng)網(wǎng)站的支持!


注:相關(guān)教程知識閱讀請移步到HTML教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
色综合久久久无码中文字幕波多| 九九久久精品视频| 欧洲中文字幕精品| 久久久99久久精品女同性| 久久99精品久久久久子伦| 在线观看日韩av先锋影音电影院| 爽爽窝窝午夜精品一区二区| 国产又黄又大又粗视频| 欧美性极品少妇精品网站| 特黄一区二区三区| 日韩一区免费| 亚洲国内在线| 欧美成人免费看| 美女又黄又免费| 国产精品亚洲综合在线观看| 亚洲女同二女同志奶水| 国产精品一二| 免费精品视频一区二区三区| xvideos亚洲| 午夜电影亚洲| 老鸭窝毛片一区二区三区| 久久6免费高清热精品| 欧美多人乱p欧美4p久久| 亚洲精品久久久久久久久久久久久久| 亚洲kkk444kkk在线观看| 日韩在线导航| 一区二区三区四区亚洲| 日韩成人在线电影网| 精品国产91亚洲一区二区三区www| 国产 porn| 欧美在线不卡区| 伊人久久一区二区三区| 1769视频在线播放免费观看| 无码人妻丰满熟妇精品区| 一区二区三区在线观看免费| 人禽交欧美网站| 中文字幕av高清在线观看| 久久国产波多野结衣| 精品一区二区久久久| 日韩电影在线观看一区二区| 亚洲激情免费观看| 亚洲第一福利网| 99成人免费视频| 欧美日韩中文在线| 久久久久久久久伊人| 高清成人在线观看| 欧美成人免费视频a| 成人免费淫片免费观看| 狠狠综合久久av一区二区小说| 亚洲国产专区| 国产在线精品一区| 亚洲精品免费在线播放| 欧美精品国产精品久久久| 国产亚洲一区二区在线观看| 成人3d动漫一区二区三区| 人妻精油按摩bd高清中文字幕| 午夜一级免费视频| 中文字幕中文字幕在线一区| 国产精品久久久久久久久久东京| 国产精品亚洲二区在线观看| av网站在线看| 三级全黄的视频在线观看| 99热最新网址| 国产精品大陆在线观看| jizzjizz16| av成人免费在线观看| 久热爱精品视频线路一| 日韩av午夜| 亚洲成a人片在线观看中文| 久久全球大尺度高清视频| 国产亚洲依依| 在线国产精品播放| 欧美日韩一区综合| 天堂久久精品忘忧草| 国产精品视频第一区二区三区| 激情久久久久久久久久久久久久久久| 国模无码视频一区| 欧美午夜免费| 蜜臀视频在线观看| 亚洲第一区在线| 欧美激情黑白配| 伊人春色在线观看| 最近中文字幕mv2018在线高清| 毛片在线网站| 波多一区二区| 国产喂奶挤奶一区二区三区| 国产精品视频久久久| 欧美日韩在线视频免费观看| jizzjizz日本少妇| 在线视频观看一区二区| 一区二区三区自拍视频| 久久国产精品久久久久久小说| 国产激情在线观看| 亚洲精品女av网站| 久久福利网址导航| 播放灌醉水嫩大学生国内精品| 国产一区二区三区探花| 影音先锋一区二区资源站| 五月激情婷婷网| 欧美捆绑视频| 国产精品久久久久久久久搜平片| 国产在线一区不卡| 国产成人精品一区二区在线小狼| 动漫一区二区| 免费男女羞羞的视频网站中文字幕妖精视频| 性欧美长视频免费观看不卡| 伊人久久大香线蕉精品组织观看| 国产一区二区久久| 欧美色婷婷天堂网站| 精品成人av一区| 欧美日韩在线精品一区二区三区激情综合| 97成人超碰| 777午夜精品视频在线播放| 99视频在线视频| 亚洲欧美怡红院| 免费一级a毛片夜夜看| 久久66热re国产| 久久国产精彩视频| 中国日本在线视频中文字幕| 国色天香一二三期区别大象| 色婷婷热久久| 不卡电影免费在线播放一区| 99久久99久久精品免费观看| 亚洲黄色在线观看视频| 国产精品手机在线| 国产视频在线视频| 麻豆视频在线免费看| 91在线精品一区二区三区| 国产自产v一区二区三区c| 朝桐光av在线一区二区三区| 国产精品jvid在线观看蜜臀| 欧美网站在线观看| 成人激情开心网| 黄色av一区二区三区| 日日摸日日碰夜夜爽无码| 久久久久久久久久久久久夜| 美女视频一区| 国产精品小说在线| 在线观看亚洲视频| 国产精品爽爽爽爽爽爽在线观看| 国产精品一国产精品最新章节| 91久久国产综合| 黄色小视频在线观看| 国产女人aaa级久久久级| 色悠久久久久综合欧美99| 一本久道久久综合| 日韩国产第一页| 免费午夜视频在线观看| 国产精品亚洲第一| videos性欧美另类高清| 麻豆成人91精品二区三区| 亚洲一级一区| 国产极品一区二区| 国产日韩综合av| 在线观看高清av| 日韩美女爱爱视频| 亚洲欧美强伦一区二区| 久久免费精品国产| 精品乱码一区二区三四区视频| 各处沟厕大尺度偷拍女厕嘘嘘| 在线视频国产区| 中国一级特黄毛片大片| 一区二区三区的久久的视频| 国产伦精品一区二区三区四区视频| 国产精品香蕉在线观看| 久久人人超碰精品| 久草福利资源在线视频| 在线免费观看黄色网址| 夜夜精品浪潮av一区二区三区| 欧美在线精品一区二区三区| 7777久久亚洲中文字幕| 99综合电影在线视频| 欧美特大特白屁股xxxx| 99久久精品国产成人一区二区| 日本精品在线观看| 国内一区二区三区在线视频| 精品少妇一区二区三区在线视频| 精品国产一区二区三区久久久久久| 久久精品国产精品青草色艺| 欧美一区二区观看视频| 国产高清无密码一区二区三区| 成人免费一级片| 中文写幕一区二区三区免费观成熟| 午夜精品一区二区三区在线视| 国产精品视频黄色| 亚洲精品白浆高清久久久久久| 国产91视频一区| 久久久天堂av| 国产伦精品一区二区三区照片| 国产毛片毛片| 亚洲人成免费电影| 国产精品三级电影| 亚洲精品国产精品乱码在线观看| 国产精品美女久久福利网站| 亚洲专区一区二区三区| 亚洲欧美另类人妖| 玖玖爱视频在线| 3atv一区二区三区| 久久99日本精品| 亚洲欧美色图区| 久久精品国产精品国产精品污| 成人aa视频在线观看| 精品久久五月天| 91性高潮久久久久久久| 99re66热这里只有精品8| 国产精品一区=区| 成人在线视频一区二区| 国产精品色婷婷视频| 一级久久久久久| 97人人模人人爽人人喊38tv| 好男人www社区在线视频夜恋| 精品视频国内| 影视亚洲一区二区三区| 国产日产精品一区| av免费观看网址| 91吃瓜在线观看| 国产性生活视频| 都市激情久久综合| 欧美专区第二页| 亚洲福利视频一区二区| 一级特黄录像免费看| 庆余年2免费日韩剧观看大牛| 日韩欧美亚洲一区二区三区| 免费国产羞羞网站视频| 麻豆精品在线| 无码人妻久久一区二区三区蜜桃| 成人欧美视频在线观看播放| 亚洲国产一区在线观看| 青青草国产精品视频| 日韩亚洲欧美在线| 欧美一区中文字幕| 高h视频在线观看| 99热在线观看精品| 猫咪av在线| 欧美一三区三区四区免费在线看| 成人www视频在线观看| 在线观看视频一区二区欧美日韩| 欧美精品乱码视频一二专区| 国内在线免费视频| 久久亚洲天堂网| 成人黄色小视频在线观看| 校园春色 亚洲色图| 国产欧亚日韩视频| 美女扒开腿让男人桶爽久久动漫| 国产一级做a爰片在线看免费| 五月婷婷一区二区| 亚洲色图第一区| 国产91av在线播放| 欧美富婆性猛交| 亚欧洲精品在线视频| 日本一区二区三区dvd视频在线| 亚洲婷婷在线观看| 香蕉久久成人网| 日韩一区二区在线免费| 午夜精品久久久久久久99| 欧美特黄aaa| 欧美**字幕| 欧美精品一区二区久久久| 三级小说一区| 在线免费视频一区二区| 国产天堂素人系列在线视频| 亚洲精品91美女久久久久久久| 国产片侵犯亲女视频播放| 黄色精品免费看| 日韩你懂的电影在线观看| 日本在线观看大片免费视频| 偷拍与自拍一区| 在线观看av一区| 亚洲欧美综合另类在线卡通| 4438x成人网最大色成网站| 亚洲乱码日产精品bd在线观看| 午夜小视频在线播放| 91丝袜高跟美女视频| 日本aⅴ在线观看| 青青青在线观看视频| 特级丰满少妇一级| 欧美三级视频在线| 在线观看日韩av电影| 91精品国产综合久久香蕉最新版| 无码少妇一区二区| 久久综合桃花网| 伊人久久大香线蕉av超碰演员| 国产精品日日夜夜| 在线免费观看亚洲视频| 五月天婷婷在线视频| aaaaa黄色片| 中文字幕2022永久在线| 欧美一级视频在线| 成人免费看片网址| 男人在线观看视频| 成人免费毛片东京热| www.在线视频.com| 99re6这里有精品热视频| 国产一级做a爰片久久毛片男| 97香蕉久久| 91精品xxx在线观看| 后进极品白嫩翘臀在线视频| 97涩涩爰在线观看亚洲| 猛男欧美办公室激情在线| 伊人影院蕉久影院在线播放| 风间由美一区二区av101| 在线观看成人av| 国产成人极品视频| 在线播放免费视频| 蜜桃久久精品成人无码av| 五月婷婷六月丁香| 亚洲国产精品推荐| 国产美女精品在线| 粉嫩一区二区三区在线观看| 中文字幕久久久久久久| 日韩欧美三级在线观看| 中文字幕第一页在线| 国产精品视频一区二区三区不卡| 在线伊人免费视频| 久久国产精品久久| 欧美一区二区高清| 成a人v在线播放| 3d性欧美动漫精品xxxx软件| 精品国产一区二区亚洲人成毛片| 国产在线播放你懂的| 亚洲国产精品人人做人人爽| 一区二区三区视频免费观看| 国产一区二区三区黄网站| 亚洲色图国产| 欧美国产激情一区二区三区蜜月| 亚洲第一天堂久久| 韩国一区二区三区美女美女秀| 男人靠女人免费视频网站|