本文用示例讲述了如何使用jQuery与PHP及Mysql结合,实现WEB版在线拍照、上传、显示浏览的功能,ajax交互技术贯穿本文始末,所以本文的读者要求具备相当熟悉jQuery及其插件使用和javscript相关知识,具备PHP和Mysql相关知识。

查看演示 下载源码

本文示例建立在本站helloweba.net两篇文章之上,一篇是用于在线拍照的:Javascript+PHP实现在线拍照功能,另一篇是用于浏览照片的:Fancybox丰富的弹出层效果。如果您对在线拍照和Fancybox不大了解,可以先参照以上两篇文章。

HTML

首先,我们要建立一个主页面index.html来展示最新上传的照片,我们使用jQuery来获取最新的照片,所以这是一个HTML页面,不需要PHP标签,当然还要建立一个包括用来拍照和上传交互所需的HTML结构。

<div id="main" style="width:90%"> <div id="photos"></div> <div id="camera"> <div id="cam"></div> <div id="webcam"></div> <div id="buttons"> <div class="button_pane" id="shoot"> <a id="btn_shoot" href="" class="btn_blue">拍照</a> </div> <div class="button_pane hidden" id="upload"> <a id="btn_cancel" href="" class="btn_blue">取消</a> <a id="btn_upload" href="" class="btn_green">上传</a> </div> </div> </div> </div> 

我们在body间加入了以上html代码,其中#photos用来加载展示最新上传的照片;#camera用于加载摄像模块,包括调用摄像flash组件webcam,以及拍照和上传等按钮。

此外,我们还需要在index.html加载必须的js文件,包括jQuery库,fancybox插件,flash摄像组件:webcam.js以及本示例组合各种操作所需的script.js。

<link rel="stylesheet" type="text/css" href="fancybox/jquery.fancybox-1.3.4.css" /> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/ jquery.min.js"></script> <script type="text/javascript" src="fancybox/jquery.fancybox-1.3.4.pack.js"></script> <script type="text/javascript" src="js/webcam.js"></script> <script type="text/javascript" src="js/script.js"></script> 

CSS

为了能给大家呈现一个相当美观的前端界面,我们使用了css3来实现一些阴影、圆角和透明度效果,请看:

#photos{width:80%; margin:40px auto} #photos:hover a{opacity:0.5} #photos a:hover{opacity:1} #camera{width:598px; height:525px; position:fixed; bottom:-466px; left:50%; margin-left:-300px; border:1px solid #f0f0f0; background:url(images/cam_bg.jpg) repeat-y; -moz-border-radius: 4px 4px 0 0; -webkit-border-radius:4px 4px 0 0; border-radius:4px 4px 0 0; -moz-box-shadow: 0 0 4px rgba(0,0,0,0.6); -webkit-box-shadow:0 0 4px rgba(0,0,0,0.6); box-shadow: 0 0 4px rgba(0,0,0,0.6);} #cam{width:100%; height:66px; display:block; position:absolute; top:0; left:0; background: url(images/cam.png) no-repeat center center; cursor:pointer} #webcam{width:520px; height:370px; margin:66px auto 22px; line-height:360px; background:#ccc; color:#666; text-align:center} .button_pane{text-align:center;} .btn_blue,.btn_green{width:99px; height:38px; line-height:32px; margin:0 4px; border:none; display:inline-block; text-align:center; font-size:14px; color:#fff !important; text-shadow:1px 1px 1px #277c9b; background:url(images/buttons.png) no-repeat} .btn_green{background:url(images/buttons.png) no-repeat right top; text-shadow:1px 1px 1px #498917;} .hidden{display:none} 

这样你在预览index.html时会发现在页面的正下方有一个摄像头按钮,默认是折叠的。

接下来我们要做的是,使用jQuery实现:通过单击页面正下方摄像头按钮,调用摄像头组件,并且完成拍照、取消和上传所需的动作。

jQuery

这一切的交互动作所需的js我们都写在script.js文件中。首先,我们需要加载摄像头组件webcam.js,关于webcam的调用,可以看下本站文章:Javascript+PHP实现在线拍照功能。调用方法如下:

script.js-Part 1

$(function(){webcam.set_swf_url('js/webcam.swf'); //载入flash摄像组件的路径 webcam.set_api_url('upload.php'); // 上传照片的PHP后端处理文件 webcam.set_quality(80); // 设置图像质量 webcam.set_shutter_sound(true, 'js/shutter.mp3'); //设置拍照声音,拍照时会发出“咔嚓”声 var cam = $("#webcam"); cam.html( webcam.get_html(cam.width(), cam.height()) //在#webcam中载入摄像组件 ); 

这时,还看不到载入摄像头效果,因为#camera默认是折叠的,继续在script.js中加入以下代码:

script.js-Part 2

var camera = $("#camera");
var shown = false;
$('#cam').click(function(){ if(shown){ camera.animate({ bottom:-466 }); }else { camera.animate({ bottom:-5 }); } shown = !shown; }); 

当单击页面正下方的摄像头按钮时,默认折叠的摄像区会向上展开,这时如果您的机器安装有摄像头,则会加载摄像组件进行摄像了。

接下来,通过单击“拍照”完成拍照功能,单击“取消”则取消刚刚所拍的照片,单击“上传”则将所拍的照片上传到服务器。

script.js-Part 3

//拍照
$("#btn_shoot").click(function(){ webcam.freeze(); //冻结webcam,摄像头停止工作 $("#shoot").hide(); //隐藏拍照按钮 $("#upload").show(); //显示取消和上传按钮 return false; }); //取消拍照 $('#btn_cancel').click(function(){ webcam.reset(); //重置webcam,摄像头重新工作 $("#shoot").show(); //显示拍照按钮 $("#upload").hide(); //隐藏取消和上传按钮 return false; }); //上传照片 $('#btn_upload').click(function(){ webcam.upload(); //上传 webcam.reset();//重置webcam,摄像头重新工作 $("#shoot").show();//显示拍照按钮 $("#upload").hide(); //隐藏取消和上传按钮 return false; }); 

点击“上传”按钮后,所拍的照片会提交给后台PHP处理,PHP将照片进行命名和存盘入库操作,请看PHP是如何操作上传照片的。

PHP

upload.php所做的事情有:获取上传的照片,命名,判断是否合法的图片,生成缩略图,存盘,写入数据库,返回JSON信息给前端。

$folder = 'uploads/'; //上传照片保存路径
$filename = date('YmdHis').rand().'.jpg';  //命名照片名称 $original = $folder.$filename; $input = file_get_contents('php://input'); if(md5($input) == '7d4df9cc423720b7f1f3d672b89362be'){ exit; //如果上传的是空白的照片,则终止程序 } $result = file_put_contents($original, $input); if (!$result) { echo '{"error":1,"message":"文件目录不可写";}'; exit; } $info = getimagesize($original); if($info['mime'] != 'image/jpeg'){ //如果类型不是图片,则删除 unlink($original); exit; } //生成缩略图 $origImage = imagecreatefromjpeg($original); $newImage = imagecreatetruecolor(154,110); //缩略图尺寸154x110 imagecopyresampled($newImage,$origImage,0,0,0,0,154,110,520,370); imagejpeg($newImage,'uploads/small_'.$filename); //写入数据库 include_once('connect.php'); $time = mktime(); $sql = "insert into photobooth (pic,uploadtime)values('$filename','$time')"; $res = mysql_query($sql); if($res){ //输出JSON信息 echo '{"status":1,"message":"Success!","filename":"'.$filename.'"}'; }else{ echo '{"error":1,"message":"Sorry,something goes wrong.";}'; } 

upload.php完成照片上传后,最终会返回json格式的数据给前端摄像组件webcam调用,现在我们回到script.js。

jQuery

webcam通过set_hook方法捕捉到后台php返回信息,onComplete表示上传完成,onError则表示错做出错了。

script.js-Part 4

webcam.set_hook('onComplete', function(msg){msg = $.parseJSON(msg); //解析json if(msg.error){ alert(msg.message); } else { var pic = '<a rel="group" href="uploads/'+msg.filename+'"><img src="uploads/small_'+ msg.filename+'"></a>'; $("#photos").prepend(pic); //将获取的照片信息插入到index.html的#photo里 initFancyBox(); //调用fancybox插件 } }); webcam.set_hook('onError',function(e){ cam.html(e); }); //调用fancybox function initFancyBox(){ $("a[rel=group]").fancybox({ 'transitionIn' : 'elastic', 'transitionOut' : 'elastic', 'cyclic' : true }); } 

说明一下,上传成功后,所拍的照片会通过以上js代码动态的插入到元素#photos里,并且同时调用fancybox插件。这时,点击刚刚上传的照片,会呈现fancybox弹出层效果。注意动态生成的元素必须通过以上代码中的initFancyBox()函数来调用fancybox,而不能直接通过fancybox()来调用,否则将不会有弹出层效果。

接下来,script.js还需要做一件事就是:动态载入最新的照片,展示在页面上,我们通过jquery的.getJSON()方法来完成ajax请求。

script.js-Part 5

function loadpic(){$.getJSON("getpic.php",function(json){ if(json){ $.each(json,function(index,array){ //循环json数据 var pic = '<a rel="group" href="uploads/'+array['pic']+'"> <img src="uploads/small_'+array['pic']+'"></a>'; $("#photos").prepend(pic); }); } initFancyBox(); //调用fancybox插件 }); } loadpic(); 

函数loadpic()向服务器getpic.php发送get请求,并将返回的json数据进行解析,将照片信息动态插入到元素#photos下,并调用fancybox插件,然后,别忘了在页面载入后调用loadpic()。

PHP

最后,由后台getpic.php来获取数据库中的上传图片并且返回json给前端。

include_once("connect.php"); //连接数据库
//查询数据表中最新的50条记录
$query = mysql_query("select pic from photobooth order by id desc limit 50"); while($row=mysql_fetch_array($query)){ $arr[] = array( 'pic' => $row['pic'] ); } //输出json数据 echo json_encode($arr); 

最后,附上数据photobooth结构:

CREATE TABLE `photobooth` (`id` int(11) NOT NULL auto_increment,`pic` varchar(50) NOT NULL,`uploadtime` int(10) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;转载:https://www.helloweba.net/javascript/179.html 

jQuery+PHP+Mysql在线拍照和在线浏览照片相关推荐

  1. html5 mysql 展示_基于jQuery+PHP+Mysql实现在线拍照和在线浏览照片

    本文用示例讲述了如何使用jQuery与PHP及Mysql结合,实现WEB版在线拍照.上传.显示浏览的功能,ajax交互技术贯穿本文始末,所以本文的读者要求具备相当熟悉jQuery及其插件使用和javs ...

  2. js 图片 mysql_jQuery+PHP+Mysql在线拍照和在线浏览照片

    [实例简介] [实例截图] [核心代码] date_default_timezone_set("PRC"); //使用北京时间 //只接受post请求 if(strtolower( ...

  3. 基于SSM+SpringBoot+MySQL+Bootstrap的OA在线办公自动化管理系统

    登陆首页 部门管理 职位管理 考勤报表 新建流程 通知管理 邮件管理 任务管理 日程管理 部门 笔记 通讯录 讨论区 技术描述 开发工具: Idea/Eclipse 数据库: mysql Jar包仓库 ...

  4. 基于JSP+Servlet+MySQL+Css+Ajax的在线网上电子图书商城

    项目运行截图 用户注册 登陆 分类信息 推荐图书 推荐图书 管理员用户 用户列表 图书新增 添加图书分类 添加分类 待处理订单列表 订单详情 用户注册 开发工具: Idea/Eclipse 数据库: ...

  5. Javascript+PHP实现在线拍照功能 (转)

    Javascript+PHP实现在线拍照功能 我们在一些WEB应用中可能会遇到这样的情况,用户需要自己现场拍照并上传到会员系统.比如驾校采集指纹拍照流程.考试现场采集照片等.我们今天要讲的是如何使用j ...

  6. 开始做在线拍照功能了

    今天开始要做在线拍照的功能了.参考的例子就是51的在线拍照. 小试了一下,原理不是太难.一个是用于捕获摄像头的类,然后是用滤镜来实现特殊效果.比较复杂的一点是关于图片上传至服务器端的实现.另外,关于滤 ...

  7. 基于百度音乐Api的Android高仿音乐播放App可在线试听下载歌词浏览

    基于百度音乐Api的Android高仿音乐播放App可在线试听下载歌词浏览 首先这也是学习过程中开发的一个练手项目,基于百度音乐Api,api在网上搜的,如果想看他的实现,可以下载我的项目来参考.风格 ...

  8. php在线拍照代码,Javascript+PHP实现在线拍照功能

    实现这个功能的前提是你的电脑设备上需要安装有摄像头设备,以及你的浏览器需要支持flash. HTML Javascript+PHP实现在线拍照功能 在body中加入一个用于调用摄像组件的容器id#ca ...

  9. flash在线拍照并上传到后台(servlet)

    一.flash在线拍照并上传到后台(servlet) 第一步:先新建一个ActionScript文件:ShiBieFunction.as 该文件的核心代码如下: =========使用摄像头获取视频流 ...

  10. 手机怎么在线拍照翻译英语?只要几个步骤轻松解决

    手机怎么在线拍照翻译英语?相信很多朋友在看新闻以及一些报到会看到一些外网的内容,不免有些是纯英文的内容,像我这种英语水平比较差的每次都会打开搜索引擎,一个个把英文字母输入进去搜索翻译,但是后来有个小伙 ...

最新文章

  1. 数据结构 -- 二叉树
  2. PHPRunner中文版
  3. python itertools product函数
  4. 使用PCA对特征数据进行降维
  5. Java中实现根据一个List中的数据的两个属性相同划分为同一类
  6. Xcode 6.3 Ineligible Devices 临时解决方法
  7. tonardo做web服务器播放大视频内存泄露问题的解决
  8. 清华提出LogME,无需微调就能衡量预训练模型的下游任务表现!
  9. QoS中流量监管和流量整形详解
  10. python pyfile py_Python中py文件引用另一个py文件变量的方法
  11. mysql 三种循环语句_MySQL循环语句
  12. SSM+Flowplayer实现web项目网页看视频
  13. vs2005创建智能设备IE脚本错误
  14. Uvalive 5713 - Qin Shi Huang's National Road System(枚举+最小瓶颈路)
  15. Julia学习04——函数
  16. jQuery 中console.log什么意思
  17. win10小课堂:微信电脑端多开方法
  18. csrf攻击与防护—2用flask简单演示防范csrf攻击之referer
  19. pandas安装完成后,报错:ImportError
  20. Flutter 1.17重磅发布​!闲鱼最新升级版 Flutter 技术电子书开放下载!

热门文章

  1. Python-移位密码、仿射变换解密
  2. 思科CISCO ASA 5521 防火墙 Ipsec 配置详解
  3. 适用于Win7系统下Intel 7代核心显卡驱动程序
  4. python计算条件概率_统计算法_概率基础
  5. python层次聚类法画图_原理+代码|详解层次聚类及Python实现
  6. EasyRecovery14免费版文件数据恢复还原软件
  7. Python实现回归分析之线性回归
  8. 人工智能——产生式系统(动物识别产生式系统)项目开发
  9. Hive collect、explode函数详解(包括concat、Lateral View)
  10. 报错 | Cannot find module ‘@better-scroll/core/dist/types/BScroll‘