整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

HTML5实现头像的上传

HTML5实现头像的上传

TML5实现头像的上传

这是利用form-data给后台传输数据,来实现头像的上传加载!

  1. html代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    </head>
<body>
    <div class="container">
        <input enctype="multipart/form-data" type="file">
        <input id="Susername"  type="text" placeholder="用户名">
        <input id="Ssex" type="number" placeholder="年龄">
        <input id="Sage" type="text" placeholder="专业">
        <input id="Smajor" type="text" placeholder="学校">
        <input id="Sschool" type="text" placeholder="QQ">
        <input id="Sqq" type="text" placeholder="地址">
        <input id="Saddress" type="text" placeholder="座右铭">
        <input id="Smotto" type="button" value="上传">
       
        <div style="clear: both;"></div>
             <progress value="0" max="100"></progress>
    </div>
    <div class="showarea">
        <h3>显示区域</h3>
    </div>
    </body>
</html>
  1. 样式代码
 .container{
            box-sizing: border-box;
            width: 404px;
            height: 100px;
            border: 1px solid #ccc;
            border-radius: 5px;
            padding-top: 20px;
            background: linear-gradient(to bottom,#0ff,#0ff 20px,transparent 0);
            margin: 0 auto;
        }
        input{
            padding: 0;
            margin: 0;
          
        }
        .container input[type=file]{
            width: 300px;
            height: 30px;
            border: 1px solid #ccc;
            background: #7FFFD4;
            color: #133131;
            float: left;
        }
        .container input[typr=button]{
            width: 100px;
            height: 32px;
            float: left;
            border: 1px solid #ccc;
            color:  #133131;
        }
        progress{
            display: none;
            width: 400px;
            height: 30px;
            margin-top: 7px;
        }
        .showarea{
            width: 600px;
            min-height: 200px;
            border: 1px solid #ccc;
            margin: 30px auto;
        }
        .showarea h3{
            widows: 100px;
            margin: 0 auto;
            line-height: 60px;
            text-align: center;
            border-bottom: 1px solid #cccc;
            color: #133131;
            
        }
        .showareaimg{
            max-width: 1000%;
        }
  1. javescript代码

本文主要介绍如何使用OpenCV剪切图形中的人物头像。

准备工作

首先创建一个Wpf项目——OpenCV_Face_Wpf,这里版本使用Framework4.7.2。

然后使用Nuget搜索【Emgu.CV】,如下图。

这里的Emgu.CV选择4.3.0.3890版本,然后安装Emgu.CV和Emgu.CV.runtime.windows。

然后下载所需文件haarcascade_frontalface_default.xml。

可以去OpenCV的开源代码中下载,下载地址:https://github.com/opencv/opencv/tree/master/data/haarcascades。

然后将文件加入进项目,并修改属性,让xml文件输出到启动目录,如下图。

使用OPenCV剪切人脸部分

现在,我们进入项目,进行OPenCV的调用。

首先引入命名空间,如下:


using Emgu.CV;

using Emgu.CV.CvEnum;

using Emgu.CV.Structure;

using System.Drawing;

using System.Windows.Forms;

然后编写人脸剪切函数——CutFace。

函数里,我们先使用CascadeClassifier类读取haarcascade_frontalface_default.xml文件,建立人脸检测的对象。

再使用Mat类来导入图片(灰度模式)。

然后再使用人脸检测的对象的方法——DetectMultiScale进行人脸数量识别。

最后通过Bitmap类把识别出来的人脸进行剪切保存。

代码如下:


public void CutFace(string filename)

{

//CvInvoke.UseOpenCL=CvInvoke.HaveOpenCLCompatibleGpuDevice;//使用GPU运算

var face=new CascadeClassifier("haarcascade_frontalface_default.xml");

var mat=new Mat(filename, ImreadModes.Grayscale);//灰度导入图片

int minNeighbors=7;//最小矩阵组,默认3

var size=new System.Drawing.Size(10, 10);//最小头像大小

var facesDetected=face.DetectMultiScale(mat, 1.1, minNeighbors, size);

//循环把人脸部分切割出来并保存

int index=0;

var bitmap=Bitmap.FromFile(filename);

foreach (var item in facesDetected)

{

index++;

var bmpOut=new Bitmap(item.Width, item.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);

var g=Graphics.FromImage(bmpOut);

g.DrawImage(bitmap, new System.Drawing.Rectangle(0, 0, item.Width, item.Height),

new System.Drawing.Rectangle(item.X, item.Y, item.Width, item.Height), GraphicsUnit.Pixel);

g.Dispose();

bmpOut.Save($"Face_{index}.png", System.Drawing.Imaging.ImageFormat.Png);

bmpOut.Dispose();

}

bitmap.Dispose();

mat.Dispose();

face.Dispose();

}

然后编写一个打开文件的函数,在成功打开文件后调用CutFace。


public void SelectImg()

{

System.Windows.Forms.OpenFileDialog frm=new System.Windows.Forms.OpenFileDialog();

frm.Filter="(*.jpg,*.png,*.jpeg,*.bmp)|*.jgp;*.png;*.jpeg;*.bmp|All files(*.*)|*.*";

if (frm.ShowDialog()==System.Windows.Forms.DialogResult.OK)

{

CutFace(frm.FileName);

}

}

现在我们启动项目,如下图:

运行结果

点击界面中的打开图片,选中带人脸的图片进行测试。

代码中默认把剪切的图片保存到Debug文件夹下,我们打开Debug文件夹,如下图:

因为我选中的图片只有一个人脸,所以得到一个剪切图片——Face_1.png。

原图与剪切后的图片对比如下:

现在,我们换一个人脸多的图片,再测试一下。测试图片如下。

运行后结果如下:

----------------------------------------------------------------------------------------------------

到此C#使用OpenCV剪切图形中的人物头像就已经介绍完了。

代码已经传到Github上了,欢迎大家下载。

Github地址: https://github.com/kiba518/OpenCV_Face_Wpf


原文地址:https://www.cnblogs.com/kiba/p/14428557.html

案一:html代码,利用img标签的crossorigin属性

<img v-if="''!=wxAvatar" class="avatar" :src="wxAvatar" crossorigin="anonymous">

微信头像,指向微信的头像地址,跨域请求资源,资源可以显示,但是html2canvas会有跨域的问题,主要利用是 crossorigin="anonymous",使html2canvas可以截取到该标签

如果是自己的服务器上的图片,要提供给其他域名下的页面,crossorigin="annoymous"可能导致错误,这个时候把自己的服务器上访问图片的那段请求加上add_header Access-Control-Allow-Origin *;配置,(这是nginx服务器上的配置)。但也要注意资源可能被随意下载,所以可以只在需要公开的目录加上这个配置。

方案二:js代码,下载图片,并读取为base64格式,然后设置为img的src