html+python+php实现更换证件照照片背景


html+python+php更换证件照背景


1、大体思路

网站前端选择图片,并将选择的图片提交到后端php处理,将选择的照片复制到网站文件夹中,然后执行python脚本,python脚本实现将照片背景转换,转换后保存到该文件夹,然后php返回访问该文件夹的具体路径。

2、实现

前端代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../xb/js/jquery.js"></script>
</head>
<body>
<div>图片链接:<input type="text" maxlength="100" id="imgurl"></div>
选择图片:<input type="file" name="file" id="file" accept="image/gif,image/png,image/jpg,image/jpeg"><button id="send">提交</button>
</body>
<script type="text/javascript">

    $(function () {


        $("#send").click(function () {  //提交实践

            // var name = $("#yourName").val();
            // var age = $("#yourAge").val();
            // var sex = $("#yourSex").val();

            var file1 = document.getElementById('file').files[0]; //获取文件路径名,注意了没有files[1]这回事,已经试过坑
            //var file1 = $("#file")[0].files[0];  //这句跟上一面那句作用一样

            console.log(document.getElementById('file').files[0].name);
            console.log(document.getElementById('file').files[0].size);
            console.log(document.getElementById('file').files[0].type);
            console.log(document.getElementById('file').files[0].lastModifiedDate);


            var formData = new FormData();

            // formData.append('name',name);
            // formData.append('age',age);
            // formData.append('sex',sex);
            formData.append('file', file1);


            $.ajax({
                type: "POST",
                url: "sv.php",  //同目录下的php文件

                data: formData,
                dataType: "json", //声明成功使用json数据类型回调

                //如果传递的是FormData数据类型,那么下来的三个参数是必须的,否则会报错
                cache: false,  //默认是true,但是一般不做缓存
                processData: false, //用于对data参数进行序列化处理,这里必须false;如果是true,就会将FormData转换为String类型
                contentType: false,  //一些文件上传http协议的关系,自行百度,如果上传的有文件,那么只能设置为false

                success: function (msg) {  //请求成功后的回调函数
                    //alert(msg);
                    // $("#result").append("
你的名字是"+msg.name+",性别:"+msg.sex+",年龄:"+msg.age+"
");
// $('#result').append(""); $("#imgurl").val(msg.imgurl); } }); }); }) </script> </html>

html+python+php实现更换证件照照片背景_第1张图片
后台代码:


date_default_timezone_set('PRC');  //获取中国时区,'PRC':中华人民共和国

//if(!file_exists(date("tupian",time()))) //如果文件夹不存在,则创建一个
//    mkdir(date("tupian",time()));

//$username = $_POST['name']; //获取索引
//$age = $_POST['age'];
//$sex = $_POST['sex'];

$filesName = $_FILES['file']['name'];  //文件名数组
$filesTmpName = $_FILES['file']['tmp_name'];  //临时文件名数组
$filePath = "D:\phpstudy_pro\WWW\shuju\admin\sctp/".$filesName; //文件路径

// for($i= 0;$i
// {
// 	if(file_exists(date("Ymd",time()).'/'.$filesName[$i])){
// 		//die($filesName[$i]."文件已存在");  //如果上传的文件已经存在
// 	}
// 	else{
// 		move_uploaded_file($filesTmpNamew[$i], date("Ymd",time()).'/'.$filesName[$i]);  //保存在缓冲区的是临时文件名而不是文件名
// 		$filePath[$i] = date("Ymd",time()).'/'.$filesName[$i];
// 	}
// }


//$file = basename($_POST['file']);  //php的basename() 方法可获取文件名
if(!file_exists("D:\phpstudy_pro\WWW\shuju\admin\sctp\/".$filesName)){
    move_uploaded_file($filesTmpName, $filePath);
}
$cmd = exec("C:\Users\zhangduokuo\AppData\Local\Programs\Python\Python38/python.exe D:\daima\python3.7/bj1.py {$filesName}",$ret);
$imgurl="http://localhost/shuju/admin/sctp/".$filesName;
//$json_array = array('name'=>$username,'age'=>$age ,'sex'=>$sex,'file'=>$filePath,'filename'=>$filesName); //转换成数组类型
$json_array = array('file'=>$filePath,'filename'=>$filesName,'imgurl'=>$imgurl); //转换成数组类型

$json= json_encode($json_array);  //将数组转换成json对象
echo   $json;
//echo $filesName;
?>


python脚本:

import cv2
import  numpy as np
import  sys
def main():
    a=sys.argv[1]
    # a="timg.jpg"
    img=cv2.imread('D:/phpstudy_pro/WWW/shuju/admin/sctp/'+a)
    #缩放
    rows,cols,channels = img.shape
    img=cv2.resize(img,None,fx=0.5,fy=0.5)
    rows,cols,channels = img.shape
    # cv2.imshow('img',img)

    #转换hsv
    hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
    lower_blue=np.array([90,70,70])
    upper_blue=np.array([110,255,255])
    mask = cv2.inRange(hsv, lower_blue, upper_blue)
    # cv2.imshow('Mask', mask)

    #腐蚀膨胀
    erode=cv2.erode(mask,None,iterations=1)
    # cv2.imshow('erode',erode)
    dilate=cv2.dilate(erode,None,iterations=1)
    # cv2.imshow('dilate',dilate)

    #遍历替换
    for i in range(rows):
        for j in range(cols):
            if dilate[i,j]==255:
                img[i,j]=(0,0,255)#此处替换颜色,为BGR通道,白色全为255,
    # cv2.imshow('res',img)
    cv2.imwrite("D:/phpstudy_pro/WWW/shuju/admin/sctp/"+a,img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    print("1")
if __name__ == '__main__':
    main()

html+python+php实现更换证件照照片背景_第2张图片

你可能感兴趣的:(html+python+php实现更换证件照照片背景)