教你使用Cocos Creator制作国旗头像生成器,附源码!
关注「编程小王子」公众号回复【头像生成器】获得源码!
下面我重点介绍一下Cocos Creator H5头像生成的实现方法:

- 获取手机相册图片
- 在 Cocos Creator 中加载相册图片
- Cocos Creator 屏幕截图
- 使用HMTL显示截屏图片
- 保存图片到相册
获取相册图片
要获取手机相册图片,需要使用浏览器 input 标签提供的能力,在桌面浏览器上则是浏览文件目录选择图片。
使用 document 动态创建 input HTML标签,并设置属性为type 为 file,accept 为"image/*",同时使用 CSS 控件一下 input 的位置
let input = document.createElement("input");
input.setAttribute('type', 'file');
input.setAttribute('accept', 'image/*');
input.setAttribute('style', 'position:absolute;margin-left:30%;margin-top:50px;-webkit-user-select:file')
document.getElementsByTagName('body')[0].appendChild(input);
当选择好图片后,还需要监听 input 标签的 change 事件,我们好方便获取图片的数据:
let oninput = (e) => {
//拿到文件对象
var file = e.target.files[0];
//读取文件数据
reader = new FileReader();
reader.readAsDataURL(file);
//文件加载成功以后,渲染到页面
reader.onload = (e)=> {
...
}
}
//监听input的change事件
input.addEventListener('change', oninput);
在 Cocos Creator 中加载相册图片
FileReader 的 onload 回调事件中,我们将图片放入 HTML 的 img 标签中
reader.onload = (e)=> {
//创建一个img标签加载图片数据
var img = document.createElement("img");
img.src = e.target.result;
//再通过img转换成Creator的Textures2D对象
let texture = new cc.Texture2D();
texture._nativeAsset = img;
texture.on('load', () => {
//最后设置到精灵上
this.sprite.spriteFrame = new cc.SpriteFrame(texture);
})
}
- 创建 img 标签,将读取到的图片设置到 img.src 属性
- 创建 cc.Texture2D 对象,加载 img 中的纹理
- 当 Textrue2D 的 load 事件完成,就可以显示到精灵组件上了
这里需要注意,Cocos Creator 不能显示超过2048 * 2048的图片,你会发现直接在手机上使用手机拍的高清图片显示出来是一片黑色。
Cocos Creator 屏幕截图
设置头像的前景框非常简单,这里就不多说了,我看怎么把合成的图片保存下来。这里是参考的Cocos Creator的范例合集中capture_to_web的做法,简单修改了一下,点击按钮生成截图:
save () {
//创建 HTML canvas 标签保存图像数据
this.createCanvas();
//将canvas的图数据保存到HTML img元素上
var img = this.createImg();
//显示这个HTML img 元素
this.showImage(img);
this.iconBg.active = true;
this.label.node.active = true;
}
这里生点看下ShowImage这个函数,我在修改了范例合集的作法:
showImage(img) {
//var img = document.createElement("img");
let offset = (cc.view._frameSize.width - this.srpite.node.width) / 2;
let top = (cc.view._frameSize.height - this.srpite.node.width) / 2;
cc.log('fs:', cc.view._frameSize.width);
cc.log('offset:', offset, img.width);
img.setAttribute('style', `position:absolute;margin-left:${offset}px ;margin-top:${top}px`);
document.getElementsByTagName('body')[0].appendChild(img);
this._img = img;
}
上面的代码主要是计算 img 元素的位置,将它放到浏览器屏幕中间。
保存图片到相册
Cocos Creator 引擎在浏览器上是不能写文件的,因此我们上面是将图片用HTML img 显示,而不是用Sprite显示。我们在手机上长按 img 元素就可以调出浏览器的保存菜单了,在桌面浏览器上可以鼠标右键保存,也可以直接拖动到桌面上。
小结
使用 Cocos Creator 不仅可以开发游戏,也能制作有效的小应用,如果在头像上加载一些Shader特效是不是会更酷呢?

教你使用Cocos Creator制作国旗头像生成器,附源码!的更多相关文章
- Google Spreadsheet Add-on Links Extractor 谷歌表格插件链接提取器的制作与发布(附源码)
引言 为什么想到制作这么一个插件呢,是因为博主在更新微信公众号[刷尽天下]的后台数据库时,需要有博客园题目帖子的链接,那么就要从这篇帖子 LeetCode All in One 题目讲解汇总(持续更新 ...
- 教你搭建SpringSecurity3框架( 更新中、附源码)
源码下载地址:http://pan.baidu.com/s/1qWsgIg0 一.web.xml <?xml version="1.0" encoding="UTF ...
- 教你搭建SpringMVC框架( 更新中、附源码)
一.项目目录结构 二.SpringMVC需要使用的jar包 commons-logging-1.2.jar junit-4.10.jar log4j-api-2.0.2.jar log4j-core- ...
- 使用 SVG 制作单选和多选框动画【附源码】
通过 JavaScript 实现 SVG 路径动画,我们可以做很多花哨的东西.今天我们要为您介绍一些复选框和单选按钮效果.实现的主要思路是隐藏原生的输入框,使用伪元素创造更具吸引力的样式,输入框被选中 ...
- 8个纯CSS3制作的动画应用及源码
对于一个复杂的图形或者动画来说,之前我们的处理方式是图片叠加或者利用CSS+JavaScript的方法,然而随着CSS3标准的不断成熟,我们甚至完全可以利用CSS3来绘制一些图片和制作丰富的动画特效. ...
- H5类似易企秀/编辑器/页面制作/开发/生成工具/软件/源码/授权
代码地址如下:http://www.demodashi.com/demo/14960.html 项目简介 H5DS (HTML5 Design software) 这是一款基于WEB的 H5制作工具. ...
- Delphi制作QQ自动登录器源码
Delphi制作QQ自动登录器源码 http://www.cnblogs.com/sunsoft/archive/2011/02/25/1964967.html 以TM2009为例,检查了一下,未登 ...
- cocos creator制作微信小游戏
2019-05-30 22:11:47 基础: javaScript基础 https://www.bilibili.com/video/av34087791?from=search&sei ...
- DevExpress - 使用 GaugeControl 标尺组件制作抽奖程序 附源码
前不久,公司举办了15周年庆,其中添加了一个抽奖环节,要从在读学员中随机抽取幸运学员,当然,这个任务就分到了我这里. 最后的效果如下,启动有个欢迎页面,数据是来自Excel的,点击开始则上面的学号及姓 ...
随机推荐
- P3705 [SDOI2017]新生舞会 分数规划 费用流
#include <algorithm> #include <iterator> #include <iostream> #include <cstring& ...
- CodeForces 1083 E The Fair Nut and Rectangles 斜率优化DP
The Fair Nut and Rectangles 题意:有n个矩形,然后你可以选择k个矩形,选择一个矩形需要支付代价 ai, 问 总面积- 总支付代价 最大能是多少, 保证没有矩形套矩形. 题解 ...
- atcode E - guruguru(思维+前缀)
题目链接:http://arc077.contest.atcoder.jp/tasks/arc077_c 题解:一道思维题.不容易想到类似区间求和具体看一下代码. #include <iostr ...
- poj 3159 Candies(dijstra优化非vector写法)
题目链接:http://poj.org/problem?id=3159 题意:给n个人派糖果,给出m组数据,每组数据包含A,B,c 三个数,意思是A的糖果数比B少的个数不多于c,即B的糖果数 - A的 ...
- Disruptor框架中生产者、消费者的各种复杂依赖场景下的使用总结
版权声明:原创作品,谢绝转载!否则将追究法律责任. Disruptor是一个优秀的并发框架,可以实现单个或多个生产者生产消息,单个或多个消费者消息,且消费者之间可以存在消费消息的依赖关系.网上其他博客 ...
- 【LeetCode】240-搜索二维矩阵 II
题目描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性: 每行的元素从左到右升序排列. 每列的元素从上到下升序排列. 示例: 现有矩阵 m ...
- Ubuntu系统添加用户权限
一.首先创建一个新用户: sudo adduser hadoop 其次设置密码: sudo passwd hadoop 如果无法使用root密码,请输入如下命令: sudo passwd root 二 ...
- virtualbox下最小化安装centos7后上网设置
在虚拟机中以最小化方式安装centos7,后无法上网,因为centos7默认网卡未激活. 可以设置 文件 /etc/sysconfig/network-scripts/ifcfg-enp0s3 将 O ...
- ImageView的功能和使用
ImageView继承自View类,它的功能用于显示图片, 或者显示Drawable对象 xml属性: src和background区别 参考:http://hi.baidu.com/sunboy_2 ...
- apache ignite系列(三):数据处理(数据加载,数据并置,数据查询)
使用ignite的一个常见思路就是将现有的关系型数据库中的数据导入到ignite中,然后直接使用ignite中的数据,相当于将ignite作为一个缓存服务,当然ignite的功能远不止于此,下面以 ...