找制作一款手机游戏戏,好象是用GPS的

顺丰速运可通过GPS定位查找附近服务网点_游戏狗手机软件
您的当前位置: >
顺丰速运可通过GPS定位查找附近服务网点
来源:游戏狗
作者:芐錯站--
随着智能手机的发展,硬件方面的提升让我们的生活变的更加便利,顺丰速运也在IOS与android两大手机平台中,推出了自己的APP客户端,这两大系统也是目前使用最普遍的手机系统。只要用户通过软件平台下载顺丰APP,就可以轻轻松松的通过手机来完成之前必须要电脑才能完成的快递业务办理。
在手机平台推出自己的客户端已经成为了一种大势所趋,顺丰速运的APP手机客户端在用户隐私保护这一快递行业棘手的问题上,顺丰速运新增的地址代码服务功能有效地解决了这一问题。在使用过程中北京商报记者发现,此项服务将用户附近的收派件网点以一串惟一的代码代替,只有通过客户端,用户才能得知具体的收件地址。同时,顺丰速运通还上线了推荐网点功能,通过GPS定位查找附近的顺丰速运网点或代收服务点,快件派送到服务点后,用户可以选择自提或让快递员送货上门。
我国的电子商务行业发展迅猛,乘着电商经济蓬勃之势,国内快递业正在经历高速成长。国家邮政局公布的最新数据显示,今年1至8月,全国规模以上快递服务企业业务量累计完成53.4亿件,同比增长60.9%;业务收入累计完成864.5亿元,同比增长34.8%。急速放大的市场需求自然引得行业竞争加剧。
电子商务在我国的发展,在近几年是前所未有的高速,最为其重要的合作伙伴,快递行业也是得到了长足的发展。如今,顺丰速运推出的手机客户端,让快递员可以方便的再手机中就可以查到自己快件的信息。最近,顺丰速运的客户端还增加了&收派员信息核实&,这让消费者的快件收取更加安全,对于之前很多人反映的假冒快递员犯罪的事情,会得到很大的缓解作用。
有了顺丰速运的手机端APP之后,不仅可以取代传统PC电脑来完成绝大多数的快递业务办理工作,更是可以应用手机的特有功能,推出新的服务,给予用户更多的便利。如今,在智能手机的软硬件都在不断提升的情况之下,顺丰速运也在逐渐加速客户端的研发力度,相信在未来,会有更多有出色的功能与服务出现在这款使用的手机应用之上。
手机软件资讯排行榜
本周下载排行榜
最新手机软件资讯怎么开启手机的玩游戏模式啊,我记得好像是有个开启GPS渲染?【华为荣耀8吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:70,969贴子:
怎么开启手机的玩游戏模式啊,我记得好像是有个开启GPS渲染?收藏
怎么开启手机的玩游戏模式啊,我记得好像是有个开启GPS渲染?然后玩游戏画质更好,更流畅是吗?
飞牛网网上超市「一站购足」,掌上大润发,1小时送到家!海量商品,足不出户,大润发周边快速送达!
你玩游戏的时候开启性能模式就可以了,把后台清理下,性能模式在手机管家中找到电池管理—电池管理—省电模式,选择成性能模式就可以了,没必要开启GPUI渲染的
狂点版本开发者选项里找
2k完美卡屏。这机子玩大行游戏真不行。
登录百度帐号推荐应用查看: 32081|回复: 5
html5 在手机浏览器上强行制定使用gps硬件有办法没有
论坛徽章:18
本帖最后由 liyihongcug 于
21:31 编辑
html5 gps定位在安卓手机浏览器上测试各个厂商都不成功
使用android开发是可以精确定位的
现在要做到的是有没有办法强行制定html5(浏览器)制定使用gps硬件获取经纬度
(w3说他html会选用若干种方式 但没有说最优选择哪一个
htm5浏览器 如ie10会选择wifi&&ip 基站&&gps等
为保证精度以及速度 要求做到使用html5 在手机浏览器上强行制定使用gps硬件有办法没有?
)http://lists.w3.org/Archives/Public/public-geolocation/2011Feb/0001.html
http://dev.w3.org/geo/api/spec-source.html
.hk/search?q=site:w3.org+geolocation+api&newwindow=1&safe=strict&ei=-wmrUszWM677iQerroDgAQ&start=20&sa=N&biw=1325&bih=577
论坛徽章:18
基本找到原因
最近项目上用到HTML5的geolocation用于定位,用Chrome
和手头的手机测试好好的功能,到终端用户那里反馈一些手机不能定位,最后确定出是部分三星、摩托的部分国行Android手机“阉割”了谷歌GSM服务包,导致HTML5的geolocation无法使用wifi和基站定位服务导致。
值得一提的是前期在stackoverflow和google groups里搜到对症描述的解决方案(貌似Android 2.*或者三星自身的问题)全部失效,因为介是个“中国特色”的问题-_lll
首先介绍下HTML5的Geolocation功能。通常情况下,我们是先判断浏览器是否支持geolocation, 如果不支持,可以提示错误,或者进入其他逻辑处理流程,现在移动端的智能手机浏览器绝大部分都是支持的。
navigator.geolocation ){
& & navigator.geolocation.getCurrentPosition(
& && &&&updateLocation,
handleLocationError,
& && &&&{maximumAge:60000,
timeout:50000, enableHighAccuracy:true}
& && &&&);
& & alert(&对不起,您的浏览器不支持html5定位&);
但是navigator.geolocation为true只是代表浏览器支持,浏览器还是要通过调用手机的定位功能来实现,所以上面的getCurrentPosition后面,分别后updateLocation和handleLocationError两个分支,分别对应成功而和失败的后续处理,这篇文章提到的由于缺少谷歌GSM服务包造成geolcation失效的情况就是走到了handleLocationError分支。
functionhandleLocationError(error)
& & switch(error.code){
& && &&&case0:
& && && & alert(&获取位置信息出错!&);
& && &&&case1:
& && && & alert(&您设置了阻止该页面获取位置信息!&);
& && &&&case2:
& && && & alert(&浏览器无法确定您的位置!&);
& && &&&case3:
& && && & alert(&获取位置信息超时!&);
具体的返回值可以查手册,缺少谷歌GSM服务包的手机,会进入case 2,其实是“无法使用定位服务”。
写到这里,只是说明了原因,那有没有什么解决方案呢。搜索了下,原来提供地图和定位相关服务的不止是google一家,还有百度、高德、搜狗,下面介绍下百度的api
(1)百度地图javascript API geolocation
咋一看,百度js api也有自己的geolocation() 这个取代html5自带的不就可以了么,经过实验,真是图样图森破了,原来所有的javascript API都还是调用的浏览器自身的geolocation进行封装实现的,也就是说如果原本不能wifi+基站定位,用百度、高德的javascript api的效果是一样的。
这里要说明的是,如果是开发Android原生软件的话,可以在APP里封装百度地图定位的SDK,这个是可以解决没有谷歌GSM服务包无法定位的问题的,因为百度地图定位SDK实际上是起到和谷歌服务包里面的定位模块一样的作用,由这里也可以看到HTML5 Webapp和原生APP的一个差别,不是一个层面的解决方案。
(2)使用百度的LocalCity() 根据IP定位到城市
既然上面说的HTML5自带的geolocation和百度Javascript API的geolocation都不能用了,那么就完全不能定位了么,我们这里暂时采用了一个方案,就是使用百度的LocalCity接口,进行IP定位,可惜这个只能返回城市和市中心的坐标,对于需要精确定位的LBS产品基本没有意义(根源上IPv4时代通过IP定位的想法本来就不是很靠谱吧),但是对我们的产品不失为一种可以接收的降级方案,当然用户体验上需要通过文字说明或者弹窗的形式告知用户一。
functionmyFun(result){
& & varlatitude
= result.center.
& & varlongitude
= result.center.
& & //doSomething(latitude,longitude);
= newBMap.LocalCity();
myCity.get(myFun);
(3)使用百度的IP定位API
varajaxObj
= createXHR();
ajaxObj.onreadystatechange
= function()
& & if(ajaxObj.readyState
& && &&&if((ajaxObj.status
&= 200 && ajaxObj.status & 300) || ajaxObj.status == 304) {
& && && && &varjsonObj
= eval(&(&+
ajaxObj.responseText + &)&);
& && && && &varpoint_x=jsonObj.content.point.x;
& && && && &varpoint_y=jsonObj.content.point.y;
& && && && &varaxis
= newBMap.MercatorProjection().pointToLngLat(newBMap.Pixel(point_x,point_y));
& && && && &varlatitude
& && && && &varlongitude
& && &&&//doSomething(latitude,longitude);
ajaxObj.open(&POST&,&/get_ip.php&,true);
ajaxObj.setRequestHeader(&Content-Type&,&application/x-www-form-urlencoded&);
ajaxObj.send(&sendmessage=&);
这理论上讲应该是个更好的解决方案,但是从实际使用测试来看,由于IP定位的局限性,实际上虽然返回的坐标不是市中心,但是也基本没有参考价值,所以只是把实现方法列一下,或许等到IPv6时代会有用吧。
这个api有几个值得注意的地方
(1)由于安全起见,所以Javascript是不支持直接获取IP地址的,所以需要服务器端,此外,如果手机程序是webapp或者和服务器不在一个域的话,还需要跨域支持,我们这里使用的是CROS跨域,get_ip.php如下(包括获取IP地址,和根据IP请求百度IP定位API获得城市信息)
& & $client_ip=
getRealIpAddr();
& & $baidu_result=
file_get_contents('http://api./location/ip?ak=ab31a87a5ae231f7xxxxxx&ip='.$client_ip);
& & //注意上面的ak最后6位略去,需要使用自己免费注册的百度api的ak
& & header(&Access-Control-Allow-Origin:
*&);//CROS跨域
& & header(&Content-Type:text/
charset=utf-8&);
& & echo$baidu_
& & functiongetRealIpAddr(){
& && &&&if(!empty($_SERVER['HTTP_CLIENT_IP'])){
& && && && &$ip=$_SERVER['HTTP_CLIENT_IP'];
& && &&&}elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
& && && && &$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
& && &&&}else{
& && && && &$ip=$_SERVER['REMOTE_ADDR'];
& && &&&return$
(2)百度IP定位API获得的坐标point需要经过坐标系转换成lat lng采用和其它接口公用
参见上面js里的
= newBMap.MercatorProjection().pointToLngLat(newBMap.Pixel(point_x,point_y));
varlatitude
varlongitude
好了,本来还准备放一个DEMO的,暂时没有时间,以后可能会补充上来
转载地址:
上一篇:微信公众平台API接口扩展包& &
论坛徽章:18
下面列出常見的定位方式和說明原理
GPS 衛星定位
他的方式就是透過不斷環繞地球的衛星發送訊號打到地面,交叉運算推出所在位置。GPS的歷史已經很悠久,很久以前的導航產品就是使用這技術。衛星第一次定位會花比較久的時間約數分鐘,目前汽車衛星導航和手機導航也都有用這方式定位。只要有三顆衛星,就可以進行定位,以此類堆,當有更多衛星時,定位就越準確。缺點是有遮蔽物時就會發生定位不到或是誤差,例如:建築物內、陰雨天等。
中文叫做輔助全球衛星定位系統(Assisted Global Positioning SAPGS)是一種輔助GPS定位的方式。輔助方式有很多種,例如:利用手機基站的信號、下載星曆資料、網路等來輔助加速GPS的定位。一般不用有網路功能的車用導航系統以較不能用AGPS定位。
手機基地台定位
顧名思義,重點就是就是基地台。當你的手機開機,然後跟電信業者連線完成後,根據信號強弱比對資料庫後,就可以定位出大約的位置,不過這方法需要透過網路做資料庫查詢才能完成定位。
利用偵測附近的無線網路基地台的 MAC Address 來比對資料庫座標,來算出所在地。不過這方法也是需要透過網路做資料庫查詢才能完成定位。
Read more:
近来参与到的项目中涉及到Geolocaton这个API,收集了一些资料备用,原文地址:
1. 关于 Geolocation 对象
随着 Opera 10.6 和 Safari 5的相继发布,截止到目前为止,W3C 中一个名为 Geolocation 的 API 规范在所有非 IE 浏览器中都得到了实现。简单地说,Geoloaction 的作用就是通过浏览器感知用户的地理位置。
事实上,对于用户地理位置的探测在互联网上早已经有了很多案例,其中一个最常见的应用就是当在地址栏输入
并按下回车键的时候,google 并没有把我们带向刚才输入的地址,而是转向了 google 在我们所处地区的页面,比如大陆和香港用户会到达 .hk,当然我们很怀念 ,但这并不是今天所要讨论的话题。
如果说地理位置的感知已经成为了一项成熟的技术,那么紧接着的问题就是 Geolocation 存在的意义是什么?就我目前对 Geolocation 的理解,我认为它存在的理由至少包含以下两点:
1. 公共数据:目前的地理位置探测,其资料往往来源于服务商各自的数据,而使用浏览器内置的统一接口,将高效整合这一信息。
2. 精确定位:无论是谷歌还是谷姐们,实现定位的原理无非是通过 IP 地址来探测用户的所在位置,众所周知,IP 的定位能力是比较差的,绝大多数情况下,它的精确度能达到数十公里就已经不错了,除此之外,没有别的任何办法,无论是服务器端语言还是客户端的 JavaScript 脚本,都无法从用户那里获取到更多对定位有所帮助的信息。然而作为用户机器上更为底层的浏览器,它将有权利支配其他有助于定位的设备,比如 GPS 和 WIFI。GPS 大家都已经很熟悉了,在信号良好的情况下,它可以精确到数米之内。而 WIFI 在国内基本上被废了,对于这项技术普及的国家,WIFI 的定位基本上可以精确到百米左右,据说经常可以见到一些公司的人,整天什么都不干,就开着小车到处晃,到一个热点( Hot Spot ),就记录下当前的地理位置,然后传回到公司的数据库。
该对象位于我们非常熟悉的 Navigator 对象下面,可以通过 navigator.geolocation 来访问,当然前面也可以加上 window.。不支持 geolocation 的浏览器并不包含这一对象,那么可以通过下面的代码来做能力检测,对不同的浏览器做不同的处理。
JavaScript Code复制内容到剪贴板
if (navigator.geolocation) {
alert( ’ 你的浏览器支持 geolocation ’ );
alert( ’ 你的浏览器不支持 geolocation ’ )
在访问 geolocation 对象时,即调用 geolocation 下面的方法时,浏览器会弹出提示,询问用户是否许可网站提供的位置服务,只有在得到用户许可过后,服务才会继续,否则将被停止,在稍后你将会了解到,我们能够捕获到用户拒绝服务的动作。下面这张图分别是 Chrome , Firefox 和 Opera 在初次访问 geolocation 时,给用户的提示:
2. 获取当前地理位置 — getCurrentPosition
当获得用户的许可过后,便一切就绪。我们将通过 geolocation 下的 getCurrentPosition 方法来获取用户的信息,这个方法是今天整篇文章的核心部分,也是 geolocation 一个非常重要的方法。
JavaScript Code复制内容到剪贴板
navigator.geolocation.getCurrentPosition( getPositionSuccess , getPositionError );
在上面的代码中,我们调用了 getCurrentPosition 方法,并为其传递了两个参数,事实上这个方法可以接受三个参数,前两个参数是函数,最后一个是对象:第一个参数是成功获取位置信息的回调函数,它是方法唯一必须的参数;第二个参数用于捕获获取位置信息出错的情况,第三个参数是配置项。
当浏览器成功获取到用户的位置信息时,getCurrentPosition 的第一个函数类型的参数将被调用,一个 position 对象会被传入到调用的函数中,这个对象中包含了浏览器传回的数据,这非常重要。
JavaScript Code复制内容到剪贴板
function getPositionSuccess( position ){
var lat = position.coords.
var lng = position.coords.
document.write( ”您所在的位置: 经度” + lat + ”,纬度” + lng );
是的,position 对象包含了用户的地理位置信息,该对象下面的 coords 子对象包含了用户所在的纬度和经度信息,通过 position.coords.latitude 可以访问纬度,而 position.coords.longitude 中存放了经度的信息,用户的位置信息越精确,这两个数字后面的小数点越长。事实上,在 Firefox 中,position 对象下还附带有另一个 address 对象,这个对象包含这个经纬度下的国家名,城市名甚至街道名。
JavaScript Code复制内容到剪贴板
function getPositionSuccess( position ){
var lat = position.coords.
var lng = position.coords.
alert( ”您所在的位置: 经度” + lat + ”,纬度” + lng );
if(typeof position.address !== ”undefined”){
var country = position.address.
var province = position.address.
var city = position.address.
alert(‘ 您位于 ’ + country + province + ’省’ + city +’市’);
错误捕获:上面都是成功获取到用户位置信息的处理,但是出现问题的情况在所难免,当获取用户的位置信息出错时,传递到 getCurrentPosition 的第二个函数类型参数被调用,一个包含具体出错信息的对象会被传递进去,错误将被捕获。
JavaScript Code复制内容到剪贴板
function getPositionError(error){
switch(error.code){
case error.TIMEOUT :
alert( ” 连接超时,请重试 ” );
case error.PERMISSION_DENIED :
alert( ” 您拒绝了使用位置共享服务,查询已取消 ” );
case error.POSITION_UNAVAILABLE :
alert( ” 亲爱的火星网友,非常抱歉,我们暂时无法为您所在的星球提供位置服务 ” );
error 对象下面,存放了3个常量:
TIMEOUT 表示获取信息超时。
PERMISSION_DENIED 表示用户选择了拒绝了位置服务。
POSITION_UNAVAILABLE 表示位置不可知。
而每一次出错时 error.code 将指向3个常量之中的一个。
配置项:getCurrentPosition 方法的第三个参数是一个对象,该对象影响了获取位置时的一些细节。
enableHighAccuracy,它将告诉浏览器是否启用高精度设备,所谓的高精度设备包含但不局限于前面所提到的 GPS 和 WIFI,值为 true 的时候,浏览器会尝试启用这些设备,默认指为 true,在这种情况下,浏览器会尽可能地进行更为精确的查询,简单地说,如果用户有可用的 GPS 设备,会返回 GPS 设备的查询结果,IP 是最后的选择,对于移动设备来说,网络接入点(基站)或许成为另一个选择,对此我还没有完全了解,但根据测试,即时没有任何额外功能的手机,也能够得到更为精确的查询结果。
timeout,超时,获取位置信息时超出设定的这个时长,将会触发错误,捕获错误的函数将被调用,并且错误码指向TIMEOUT。
这样我们尝试修改调用 getCurrentPosition 时传递的参数
JavaScript Code复制内容到剪贴板
navigator.geolocation.getCurrentPosition( getPositionSuccess , getPositionError,{
timeout : 5000 // 5 秒超时
3. 持续追踪位置 — watchPosition
对于使用移动设备的用户来说,位置并不是固定的,W3C 当然也考虑到了这一点,watchPosition 是一个专门用来处理这一情况的方法,watchPosition 被调用后,浏览器会跟踪设备的位置,每一次位置的变化,watchPosition 中的代码都将会被执行。对于致力于移动设备 web 开发的同学来说,这个方法是及其重要的,它也许将会改变 web 移动客户端的格局。
JavaScript Code复制内容到剪贴板
navigator.geolocation.watchPosition( refreshPosition );
上面的代码表示,但设置位置发生改变时,refreshPosition 将会被调用。事实上 watchPosition 和 getCurrentPosition 几乎一模一样,同样包含了一个成功获取位置的回调函数,一个获取失败的回调函数和一个配置项,区别仅仅是在触发的时机上。所以具体的方法就不再重复了。上面的代码表示在每一次位置发生改变时,调用 refreshPosition 函数。
4. 实例 — 与 Google Map 交互
接下来,我们通过一个实例,来具体应用一下 Geolocation ,实例的最终效果是,获取用户的位置,并通过 Google Map 在地图上标记出来,当用户的位置发生改变后,更新之前在地图上的标记到新的位置。首先我们准备好 DOM,并加载 Google Map
XML/HTML Code复制内容到剪贴板
&!– 按钮,被点击时开始获取用户位置信息 –&
&input type=”button” id=”getPos” value=”获取我的位置” /&
&!– 用来存放反馈给用户信息的 div –&
&div id=”info”&&/div&
&!– 为 Google Map 准备 –&
&div id=”map”&&/div&
&script type=”text/javascript” src=”” &&/script&
接下来我们在 JavaScript 中获取这些 DOM,并为 Google Map 提供一个对象用来存放地图和标记。这些都是准备工作,很烦,但是不得不做。
JavaScript Code复制内容到剪贴板
var dom = {
btn : document.getElementById(‘getPos’),
info : document.getElementById(‘info’),
map : document.getElementById(‘map’)
var gmap = {
map : null,
marker : null
接下来监听按钮的事件,当按钮被点击的时候,将触发获取用户的位置信息。在这里我们对浏览器进行了检测,如果不支持 Geolocation 接口,将提示用户,并停止进一步的动作。
JavaScript Code复制内容到剪贴板
dom.btn.onclick = function(){
if (navigator.geolocation) {
.innerHTML = ”请等待查询结果返回”;
.className = ”warn”;
navigator.geolocation.getCurrentPosition(getPositionSuccess,getPositionError,{timeout:5000});
.innerHTML = ”抱歉,您所使用的浏览器不支持 Geolocation 接口”;
.className = ”warn”;
在上面我们向 getCurrentPosition 传递了两个函数,现在我们来具体写这两个函数,首先是 getPositionSuccess ,当成功获取到用户的位置信息时,这个函数被调用,我们将在这时更新页面上的显示值,并配置追踪用户的位置的函数,最后调用 Google Map 的 API 在 id 为 map 的 div 中显示地图,并在地图上标记出用户的当前位置。
JavaScript Code复制内容到剪贴板
function getPositionSuccess(position){
var lat = position.coords.
var lng = position.coords.
.innerHTML = ”您所在的位置: 经度” + lat + ”,纬度” +
navigator.geolocation.watchPosition(refreshPosition);
// 载入 Google 地图
var latlng = new google.maps.LatLng(lat, lng);
var myOptions = {
zoom : 16,
center : latlng,
mapTypeId : google.maps.MapTypeId.ROADMAP
gmap.map = new google.maps.Map(document.getElementById(“map”), myOptions);
// 向地图中添加标记
gmap.marker = new google.maps.Marker({
position: latlng,
map: gmap.map
对于错误处理的函数,则非常简单,可以参看前面的内容。我们来关注一下追踪位置的函数,在这个函数中,我们实时更新显示信息,并更新地图到用户所处的位置。
JavaScript Code复制内容到剪贴板
function refreshPosition(position){
var lat = position.coords.
var lng = position.coords.
var latlng = new google.maps.LatLng(lat, lng);
// 重设地图位置
gmap.map.setCenter(latlng);
.innerHTML = ’您所在的位置: 经度’ + lat ’ + ’,纬度’ +
// 重设标记位置
gmap.marker.setOptions({
position: new google.maps.LatLng(lat, lng)
以上关于 Google Map 的代码不是很了解的同学可以到 Google Code 去看一下 手册,这里只是很简单的应用,有兴趣的同学可以进一步延伸。下面是这个 Demo 的最终效果。
连接超时,请重试
这个 Demo 在具备 GPS 功能的手机上,能够非常精确地定位,在我的测试中,在信号良好的地方,基本上能够定位到所在地方,并且位置追踪工作良好。下面是我在手机上浏览本 Demo 的效果,平台是 S60v5 ,浏览器 Opera Mobile 10.1 beta 1。需要说明一点的是,Opera Mobile 正是从这个版本开始支持 Geolocation 的。
论坛徽章:18
牛人 ---- &&《》
何使用HTML5实现拍照上传应用
分类: 前端 应用开发 移动开发
22:16 23323人阅读 评论(33) 收藏 举报h
html5videochromeimageoperafunction
& && &&&在HTML5规范的支持下,WebApp在手机上拍照已经成为可能。在下面,我将讲解Web App如何用手机进行拍照,显示在页面上并上传到服务器。
1、&&视频流
& && &&&HTML5 The Media Capture API提供了对摄像头的可编程访问,用户可以直接用getUserMedia获得摄像头提供的视频流。我们需要做的是添加一个HTML5的Video标签,并将从摄像头获得视频作为这个标签的输入来源(请注意目前仅Chrome和Opera支持getUserMedia。补充:请使用Opera支持HTML5的新版本,如果是Chrome,版本需为Chrome 18.0.1008+,并使用about:flags来开启WebRTC,请看下图)。
[html] view plaincopy
&video id=&video& autoplay=&&&&/video&&&
&script&&&
var video_element = document.getElementById('video');&&
if (navigator.getUserMedia) { // opera should use opera.getUserMedia now, chrome use webkitGetUserMedia&&
& && && &navigator.getUserMedia('video',success, error);&&
function success(stream) {&&
& && && &video_element.src =&&
&/script&&&
& && &&&拍照功能,我们采用HTML5的Canvas实时捕获Video标签的内容,Video元素能作为Canvas图像的输入,这一点很棒。主要代码如下:
[html] view plaincopy
&script&&&
& && && &var canvas =document.createElement('canvas');&&
& && && &var ctx = canvas.getContext('2d');&&
& && && &var cw =&&
& && && &var ch =&&
& && && &ctx.fillStyle = &#ffffff&;&&
& && && &ctx.fillRect(0, 0, cw, ch);&&
& && && &ctx.drawImage(video_element, 0, 0, vvw,vvh, 0,0, vw,vh);&&
& && && &document.body.append(canvas);&&
&/script&&&
3、&&图片获取
& && &&&下面我们要从Canvas获取图片数据,其核心思路是用canvas的toDataURL将Canvas的数据转换为base64位编码的PNG图像,类似于“data:image/base64,xxxxx”的格式。
[html] view plaincopy
var imgData =canvas.toDataURL(&image/png&);&&
& && &&&因为真正图像数据是base64编码逗号之后的部分,所以我们实际服务器处理的图像数据应该是这部分,我们可以用两种办法来获取。
& && &&&第一种:是在前端截取22位以后的字符串作为图像数据,例如:
[html] view plaincopy
var data = imgData.substr(22);&&
& && &&&如果要在上传前获取图片的大小,可以使用:
[html] view plaincopy
var length = atob(data).// atob decodes a string of data which has been encoded using base-64 encoding&&
& && &&&第二种:是在后端获取传输的数据后用后台语言截取22位以后的字符串。例如PHP里:
[html] view plaincopy
$image = base64_decode( str_replace('data:image/base64,', '',$data);&&
4、&&图片上传
& && &&&在前端可以使用Ajax将上面获得的图片数据上传到后台脚本。例如使用jQuery时:
[html] view plaincopy
$.post('upload.php',{ 'data' : data } );&&
& && &&&在后台我们用PHP脚本接收数据并存储为图片。
[html] view plaincopy
function convert_data($data){&&
& & $image = base64_decode( str_replace('data:image/base64,', '',$data);&&
& & save_to_file($image);&&
function save_to_file($image){& &&&
& & $fp = fopen($filename, 'w');&&
& & fwrite($fp, $image);&&
& & fclose($fp);&&
& && &&&请注意,以上的解决方案不仅能用于Web App拍照上传,并且你可以实现把Canvas的输出转换为图片上传的功能。这样你可以使用Canvas为用户提供图片编辑,例如裁剪、上色、涂鸦的画板功能,然后把用户编辑完的图片保存到服务器上。
Canvas涂鸦功能
& && &&&在HTML5的驱动下,Web App与Native App之间是否还有不可逾越的鸿沟?我将会在3月23日百度开发者大会上现场来解答这个问题,敬请期待。
& && &&&相关规范:
& && &&&The MediaCapture API:
& && &&&Canvas:
& && &&&相关The Media Capture示例:
& && &&&Live Photo booth
& && &&&Instant Camera
& && &&&原创文章,转载请标明出处:蒋宇捷的专栏
论坛徽章:0
这事是底层干的吧,不向上提供接口的话,没办法处理
招聘 : 论坛徽章:0
谢谢你的分享
itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有    
 北京市公安局海淀分局网监中心备案编号:10 广播电视节目制作经营许可证:编号(京)字第1149号}

我要回帖

更多关于 制作一款手机游戏 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信