Javascript+PHP实现在线拍照功能

原创文章 作者:月光光 2012年06月28日 13:12helloweba.com 标签:JavaScript  PHP  在线拍照 

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

Javascript+PHP实现在线拍照功能

实现这个功能的前提是你的电脑设备上需要安装有摄像头设备,以及你的浏览器需要支持flash。

HTML

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Javascript+PHP实现在线拍照功能</title>
</head>

<body>
<div id="cam">
  <!--调用摄像组件并显示图像-->
  <input type=button value="点击这里拍照" class="btn" onclick="take_snapshot()">
</div>
<div id="results">
   <!--显示上传结果-->
</div>
</body>
</html>

在body中加入一个用于调用摄像组件的容器id#cam和一个显示上传信息的容器id#results。

Javascript

接下来调用摄像组件,我们先载入webcam.js,用于拍照和上传的js库。

<script type="text/javascript" src="webcam.js"></script>

然后在容器id#cam中,加入以下代码:

<script language="JavaScript">
webcam.set_api_url( 'action.php' ); 
webcam.set_quality( 90 ); // 图像质量(1 - 100)
webcam.set_shutter_sound( true ); // 拍照时播放声音
		
document.write( webcam.get_html(320, 240, 160,120) );
</script>

我们调用了webcam,其中webcam.set_api_url用来设置图像上传交互的php路径,set_quality可设置图像质量,set_shutter_sound设置声音,get_html输出摄像组件,参数即宽度、高度、上传后宽度、上传后高度。

当点击按钮拍照时,需要执行以下代码:

<script language="JavaScript">
webcam.set_hook( 'onComplete', 'my_completion_handler' );
		
function take_snapshot() {
	document.getElementById('results').innerHTML = '<h4>Uploading...</h4>';
	webcam.snap();
}
		
function my_completion_handler(msg) {
	if (msg.match(/(http\:\/\/\S+)/)) {
		var image_url = RegExp.$1;
		document.getElementById('results').innerHTML = 
					'<h4>Upload Successful!</h4>' + 
					'<img src="' + image_url + '">';
		webcam.reset();
	}
	else alert("PHP Error: " + msg);
}
</script>

当执行拍照动作时,代码与后台php交互,如果上传图片完成后,则返回相应的信息。

PHP

action.php所做的就是将本地拍照的图像上传到服务器,并将图片路径返回给前端。注意存放图片的路径要给写权限。

$filename = date('YmdHis') . '.jpg';
$result = file_put_contents( 'pics/'.$filename, file_get_contents('php://input') );
if (!$result) {
	print "ERROR: Failed to write data to $filename, check permissions\n";
	exit();
}

$url = 'http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['REQUEST_URI']) . '/pics/' . $filename;
print "$url\n";

本文只是简单的介绍了下在线拍照和上传功能,其实深入应用场景如上传后再裁剪,生成多张不同比例的图像等等,大家自己去琢磨吧。

声明:本文为原创文章,helloweba.net和作者拥有版权,如需转载,请注明来源于helloweba.net并保留原文链接:https://www.helloweba.net/javascript/178.html

27条评论

  • nihao

    我也是,是骗子吗? 为什么不行?有谁知道吗?发我邮箱一份,非常感谢,258864649@***.COM

  • looooook

    为什么你这里预览能看,放我本地测试就不行,还少一个test.php

  • 梅花

    错误Movie is not loaded yet ,啥原因呀

  • 请指教如何可自定文件名称

  • 下了Javascript+PHP实现在线拍照功能
    试验, 很棒的
    可是想加个输入文件名称
    按拍照时一起传到action.php
    $filename = XXXXX'-'date('YmdHis') . '.jpg';
    图存盘后, 格式无法辨识
    请指教如何可自定文件名称
    谢谢

  • 下了试验, 很棒的
    可是想加个输入文件名称
    按拍照时一起传到action.php
    $filename = XXXXX'-'date('YmdHis') . '.jpg';
    图存盘后, 格式无法辨识
    请指教如何可自定文件名称
    谢谢

  • 说的挺对的。

  • 路过,赞一个

  • 安装了flash但是还是出现Movie is not loaded yet问题

  • 为什么我会报Movie is not loaded yet

  • 如果有多个摄像头的话怎么去选择

  • 你机器装有摄像头么?

  • ***在吗?为什么我打开你们的测试DEMO页面是空白的呀。我到本地测试也是空白

  • ***在吗?为什么我打开你们的测试DEMO页面是空白的呀。我到本地测试也是空白,有些人的不是空白。

  • 有兼容问题,IE下拍出来的照片是空白

  • 为什么上传图片会有错呢???

  • 不能预览拍的照片是怎么回事啊?

  • 能拍照,为什么不能显示缩略图呢?

  • 错误Movie is not loaded yet ,啥原因呀

  • 感觉非常好,但我只会ASP啊,请问ASP能实现吗?