canvas绘制一个常用的emoji表情


Posted in Javascript onMarch 30, 2017

效果图:

canvas绘制一个常用的emoji表情

代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <title>装逼表情</title>
 <meta name="viewport" content="initial-scale=1, maximum-scale=1">
 <meta name="apple-mobile-web-app-capable" content="yes">
 <meta name="apple-mobile-web-app-status-bar-style" content="black">
</head>
<style type="text/css">
 *{
 margin: 0;
 padding: 0;
 }
 body{
  overflow:hidden;
 }
 canvas{
 /*background: #000;*/
 /*opacity: 0.5;*/
 }
</style>
<body>
 <canvas id="canvas"></canvas>
</body>
<script type="text/javascript">
(function(win,el){
 var canvas = document.querySelector(el),
 ctx = canvas.getContext('2d');
 canvas.width = win.innerWidth;
 canvas.height = win.innerHeight;

 ctx.translate(canvas.width/2,canvas.height/2);//将画布移到屏幕中心

 // 绘制圆形头部
 ctx.beginPath();
 var grd=ctx.createLinearGradient(0,-100,0,100);
 grd.addColorStop(0,'#FDF390');
 grd.addColorStop(1,'#B97814');

 ctx.fillStyle = grd;
 ctx.strokeStyle = '#A86B14';
 ctx.lineWidth = 5;
 ctx.arc(0,0,100,0,2*Math.PI);
 ctx.fill();
 ctx.stroke();

 //嘴巴
 ctx.beginPath();
 ctx.lineCap = 'round';
 ctx.lineJoin = 'round';
 ctx.fillStyle = '#754800';
 ctx.strokeStyle = '#935B06';
 ctx.moveTo(-63,-2);
 ctx.quadraticCurveTo(-37,90,49,46);
 ctx.lineTo(-63,-2);
 ctx.fill();
 ctx.stroke();

 // 牙齿
 ctx.beginPath();
 ctx.lineWidth = 8;
 ctx.strokeStyle = '#FFF';
 ctx.moveTo(-58,6);
 ctx.lineTo(38,47);
 ctx.stroke();

 // 眼泪左
 ctx.beginPath();
 var yanlei = ctx.createLinearGradient(-48,-48,-97,30);
 yanlei.addColorStop(0,'#90C1C8');
 yanlei.addColorStop(1,'#5394C8');

 var yanleib = ctx.createLinearGradient(-48,-48,-97,30);
 yanleib.addColorStop(0,'#7CAEA7');
 yanleib.addColorStop(1,'#245F6A');

 ctx.strokeStyle = yanleib;
 ctx.fillStyle = yanlei;
 ctx.moveTo(-56,-37);
 ctx.lineTo(-96,25);
 ctx.quadraticCurveTo(-90,50,-82,56);
 ctx.lineTo(-29,-27);
 ctx.stroke();
 ctx.fill();

 // 眼泪右
 ctx.beginPath();
 var yanlei = ctx.createLinearGradient(-48,-48,-97,30);
 yanlei.addColorStop(0,'#90C1C8');
 yanlei.addColorStop(1,'#5394C8');
 ctx.strokeStyle = yanleib;
 ctx.fillStyle = yanlei;
 ctx.moveTo(33,35);
 ctx.lineTo(34,91);
 ctx.quadraticCurveTo(55,88,55,78);
 ctx.lineTo(53,44);
 ctx.stroke();
 ctx.fill();

 // 眼睛
 ctx.beginPath();
 ctx.lineJoin = 'round';
 ctx.lineCap = 'round';
 ctx.lineWidth = 5;
 ctx.fillStyle = '#714801';
 ctx.strokeStyle = '#714801'
 ctx.moveTo(-58,-39);
 ctx.quadraticCurveTo(-32,-41,-25,-27);
 ctx.quadraticCurveTo(-42,-36,-58,-39);
 ctx.fill();
 ctx.stroke();

 // 麒麟臂
 ctx.beginPath();
 var qlgrd=ctx.createRadialGradient(30,-19,5,30,-19,60);
 qlgrd.addColorStop(0,'#F7D25F');
 qlgrd.addColorStop(1,'#EEB63B');

 ctx.lineWidth = 5;
 ctx.strokeStyle = '#CE7F12';
 ctx.fillStyle = qlgrd;
 ctx.moveTo(78,87);
 ctx.quadraticCurveTo(100,74,81,-19);
 ctx.quadraticCurveTo(68,-45,49,-39);
 ctx.quadraticCurveTo(59,-35,59,-26);
 ctx.quadraticCurveTo(36,-62,-10,-59);
 ctx.quadraticCurveTo(-14,-55,-9,-50);
 ctx.quadraticCurveTo(18,-48,33,-26);
 ctx.quadraticCurveTo(0,-54,-28,-48);
 ctx.quadraticCurveTo(-37,-42,-28,-33);
 ctx.quadraticCurveTo(-1,-37,19,-15);
 ctx.quadraticCurveTo(-5,-37,-34,-28);
 ctx.quadraticCurveTo(-36,-21,-27,-18);
 ctx.quadraticCurveTo(-13,-17,11,2);
 ctx.quadraticCurveTo(-10,-15,-27,-11);
 ctx.quadraticCurveTo(-30,-6,-24,1);

 ctx.lineTo(1,12);
 ctx.quadraticCurveTo(7,29,41,42);
 ctx.quadraticCurveTo(43,63,52,81);
 ctx.quadraticCurveTo(64,92,78,87);
 ctx.stroke();
 ctx.fill();

})(window,'#canvas')
</script>
</html>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
ExtJS下 Ext.Direct加载和提交过程排错小结
Apr 02 Javascript
javascript读取Xml文件做一个二级联动菜单示例
Mar 17 Javascript
简介AngularJS的HTML DOM支持情况
Jun 17 Javascript
JavaScript实现的类字典插入或更新方法实例
Jul 10 Javascript
Vue.js动态添加、删除选题的实例代码
Sep 30 Javascript
js实现图片360度旋转
Jan 22 Javascript
小程序云开发如何实现图片上传及发表文字
May 17 Javascript
基于vue写一个全局Message组件的实现
Aug 15 Javascript
vue 中url 链接左边的小图标更改问题
Dec 30 Javascript
Vue.js中使用Vuex实现组件数据共享案例
Jul 31 Javascript
使用webpack5从0到1搭建一个react项目的实现步骤
Dec 16 Javascript
JS实现页面侧边栏效果探究
Jan 08 Javascript
JavaScript装饰器函数(Decorator)实例详解
Mar 30 #Javascript
Angular.JS去掉访问路径URL中的#号详解
Mar 30 #Javascript
详解Angular.js数据绑定时自动转义html标签及内容
Mar 30 #Javascript
JavaScript观察者模式(publish/subscribe)原理与实现方法
Mar 30 #Javascript
Angular.js去除页面中显示的空行方法示例
Mar 30 #Javascript
JavaScript实现父子dom同时绑定两个点击事件,一个用捕获,一个用冒泡时执行顺序的方法
Mar 30 #Javascript
vue2.0实现倒计时的插件(时间戳 刷新 跳转 都不影响)
Mar 30 #Javascript
You might like
PHP获取当前执行php文件名的代码
2017/03/02 PHP
PHP生成zip压缩包的常用方法示例
2019/08/22 PHP
PHP 文件上传限制问题
2019/09/01 PHP
laravel csrf排除路由,禁止,关闭指定路由的例子
2019/10/21 PHP
mailto的使用技巧分享
2012/12/21 Javascript
js 判断计算字符串长度/判断空的简单方法
2013/08/05 Javascript
不使用ajax实现无刷新提交表单
2014/12/21 Javascript
基于javascript实现的搜索时自动提示功能
2014/12/26 Javascript
JavaScript操作HTML元素和样式的方法详解
2015/10/21 Javascript
理解javascript正则表达式
2016/03/08 Javascript
原生js实现弹出层登录拖拽功能
2016/12/05 Javascript
利用JS判断鼠标移入元素的方向
2016/12/11 Javascript
vuejs2.0运用原生js实现简单的拖拽元素功能示例
2017/02/24 Javascript
jQuery实现的表格前端排序功能示例
2017/09/18 jQuery
JS动态添加元素及绑定事件造成程序重复执行解决
2017/12/07 Javascript
vue 纯js监听滚动条到底部的实例讲解
2018/09/03 Javascript
浅谈Javascript中的对象和继承
2019/04/19 Javascript
基于javascript原生判断DOM是否加载完毕
2020/10/14 Javascript
探索Python3.4中新引入的asyncio模块
2015/04/08 Python
对Python3.6 IDLE常用快捷键介绍
2018/07/16 Python
python opencv判断图像是否为空的实例
2019/01/26 Python
python 叠加等边三角形的绘制的实现
2019/08/14 Python
python Kmeans算法原理深入解析
2019/08/23 Python
解决Pytorch 加载训练好的模型 遇到的error问题
2020/01/10 Python
Python3将ipa包中的文件按大小排序
2020/04/17 Python
Pymysql实现往表中插入数据过程解析
2020/06/02 Python
python爬虫用request库处理cookie的实例讲解
2021/02/20 Python
pytorch Dataset,DataLoader产生自定义的训练数据案例
2021/03/03 Python
如何选择使用结构还是类
2014/05/30 面试题
模具专业毕业推荐信
2014/03/08 职场文书
2014年母亲节寄语
2014/05/07 职场文书
巾帼标兵事迹材料
2014/12/26 职场文书
岳麓书院导游词
2015/02/03 职场文书
2015年体检中心工作总结
2015/05/27 职场文书
MySQL令人咋舌的隐式转换
2021/04/05 MySQL
Java实现房屋出租系统详解
2021/10/05 Java/Android