php实现手机拍照上传头像功能

现在手机拍照很火,那么如何使用手机拍照并上传头像呢?原因很简单,就是数据传递,首先手机传递照片信息,这个就不是post传递 也不是get函数传递,
这个另外一种数据格式传递,使用的是$GLOBALS [‘HTTP_RAW_POST_DATA‘],这个系统函数跟post很相似,但是$GLOBALS [‘HTTP_RAW_POST_DATA‘]支持的数据格式更丰富些,详细的区别请自己百度谷歌。
设计流程就是:
$GLOBALS [‘HTTP_RAW_POST_DATA‘]传递照片数据流(二进制)-->打开一张空白图--->把数据流写进空白图片里面--判断是否是有效图片---完成。
注意传递照片的二进制流已经包含照片的尺寸大小,格式等等属性,时间上就是把手机图片信息传递到web端页面。

手机端一般使用flash切割照片大小,大家都知道图片和视频是由二进制流组成的,既然图片可以上传,那么视频能不能上传呢?原理是不是和手机拍照上传头像一样呢?自己可以去研究一下

    /*
     * 上传图片类
     * @parameter; 用户ID
     * @date:2011-8-15
     * @author:cy
     * */
    function UpImg($subdir){
    // 设置存储路径
    if(!empty($subdir)){
        $dirnow=getcwd();
        $folder =$dirnow."/cover/".$subdir;// folder where to save images
          if( !is_dir($folder) )    mkdir($folder);  

    // 图片命名
        $datenow=date(‘Ymd‘);
        $timenow=time();
        $image = $datenow.$timenow.‘.jpg‘;  

    // 图片是否已存在
        $check = $folder . ‘/‘ . $image;
            if (file_exists($check)) {
                unlink($check);
            } else {
                $png = file_get_contents ( ‘php://input‘ ) ? file_get_contents ( ‘php://input‘ ) : gzuncompress ( $GLOBALS [‘HTTP_RAW_POST_DATA‘] );//得到post过来的二进制原始数据
                if(!empty($png)){
                    $file = @fopen($folder."/".$image, "w");
                    fwrite($file,$png);//写入
                    fclose($file);//关闭
                    // orignal image location
                     $write_image = $folder . ‘/‘ . $image;  

                }else{
                    $msg = "没有数据流";
                }
                if(getimageInfo($write_image)){
                        $msg = "上传成功";
                    }else{$msg = "图片格式不正确";}
        }
    }else{
        $msg = "参数错误";
    }
            return $msg;
         }  

    /*
     * 检测图片是否合法
     * @parameter; 文件名
     * @date:2011-8-15
     * @author:cy
     * */
        function getimageInfo($imageName = ‘‘) {
            $imageInfo = getimagesize ( $imageName );
            if ($imageInfo !== false) {
                $imageType = strtolower ( substr ( image_type_to_extension ( $imageInfo [2] ), 1 ) );
    //            $imageSize = filesize ( $imageInfo );
                return $info = array (‘width‘ => $imageInfo [0], ‘height‘ => $imageInfo [1], ‘type‘ => $imageType, ‘mine‘ => $imageInfo [‘mine‘] );
            } else {
                //不是合法的图片
                return false;
            }    

        }    

在使用xml-rpc的时候,server端获取client数据,主要是通过php输入流input,而不是$_POST数组

所根据,上面几个探测,我们可以作出以下总结:
1,Content-Type取值为application/x-www-form-urlencoded时,php会将http请求body相应数据会
填入到数组$_POST,填入到$_POST数组中的数据是进行urldecode()解析的结果。(其实,除了该Content-Type,还有
multipart/form-data表示数据是表单数据,稍后我们介绍)
2,php://input数据,只要Content-Type不为multipart/form-data(该条件限制稍后会介绍)。那么php:
//input数据与http entity body部分数据是一致的。该部分相一致的数据的长度由Content-Length指定。
3,仅当Content-Type为application/x-www-form-urlencoded且提交方法是POST方法时,$_POST数据与php://input数据才是”一致”(打上引号,表示它们格式不一致,内容一致)的。其它情况,它们都不一致。
4,php://input读取不到$_GET数据。是因为$_GET数据作为query_path写在http请求头部(header)的PATH字段,而不是写在http请求的body部分。

这也帮助我们理解了,为什么xml_rpc服务端读取数据都是通过file_get_contents(‘php://input’, ‘r’)。而不是从$_POST中读取,正是因为xml_rpc数据规格是xml,它的Content-Type是text/xml。

转载:http://www.cnblogs.com/y0umer/archive/2011/08/15/2809618.html

时间: 2024-12-16 03:04:20

php实现手机拍照上传头像功能的相关文章

网站建设中使用HTML5实现使用手机摄像头拍照上传的功能

HTML5技术支持WebApp在手机上拍照,显示在页面上并上传到服务器.这是手机网站建设中常见的功能,当然你也可以在其它类型应用中适当使用此技术. 1. 视频流 html5 的 The Media Capture(媒体捕捉) API 提供了对摄像头的可编程访问,用户可以直接用 getUserMedia(请注意目前仅Chrome和Opera支持)获得摄像头提供的视频流.我们需要做的是添加一个Html5 的 Video 标签,并将从摄像头获得的视频作为这个标签的输入来源. <video id="

相册选择头像或者拍照 上传头像以NSData 图片二进制格式 表单上传

一.点击头像图片 或者按钮 在相册选择照片返回img,网络上传头像要用data表单上传 (1)上传头像属性 // 图片二进制格式 表单上传 @property (nonatomic, strong) NSData *imageWithData; (2)头像点击事件 - (void)headImageEvent{ NSLog(@"上传头像"); [self selectPhotoAlbumWithSelectPhotoHandle:^(UIImage *img) { self.heade

Flask blog实战---上传头像功能

第一步:数据库的表单中新增用户头像这一字段models.py中 第二步:在编辑资料的表单中增加头像上传, avatar = FileField('头像') 第三步:在编辑资料的路由界面,添加用户提交头像的功能,参考博客 http://ncitycode.com/python/flask/2016/6/18/ UPLOAD_FOLDER = current_app.config['UPLOAD_FOLDER'] 这里我在config.py中设置的文件上传路径为 将数据库中头像存储的路径修改为 到这

完美实现类似QQ的自拍头像、上传头像功能!(Demo 源码)

现在很多下载客户端程序都需要设定自己头像的功能,而设定头像一般有两种方式:使用摄像头自拍头像,或者选择一个图片的某部分区域作为自己的头像. 一.相关技术 若要实现上述的自拍头像和上传头像的功能,会碰到以下要解决的问题: (1)调用摄像头,捕获摄像头采集的视频,并将采集的视频绘制到UI上. (2)从图片文件读取Image,并显示在控件上(这个相当easy). (3)在显示的视频或图片上,能够拖动一个正方形,以选择指定部分的区域作为自己的头像. (4)从视频中截获一帧保存为图片. (5)从图片中截取

Android Studio第四十期 - 上传头像功能支持权限管理

代码已经整理好,加了权限管理和SP保存上传服务器的方法,希望能够帮到大家~效果如下图: 地址:https://github.com/geeklx/MyApplication/tree/master/p025_upload_img 附:这里借鉴了翔神(http://blog.csdn.net/lmj623565791/article/details/72859156)的写法,大家可以好好学习一下~哈哈~

js上传头像功能

这也是学习过程中的一个很使用的知识点就分享给大家了 注释都写在里面了 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-eq

Android应用开发之使用PhoneGap实现拍照上传功能

看这里:Android应用开发之使用PhoneGap实现拍照上传功能 在之前的使用Intellij Idea 搭建PhoneGap Android开发环境以及Android应用开发之使用PhoneGap实现位置上报功能两篇文章中,我们学习了phonegap Android环境的搭建以及phonegap获取位置信息自动上报等,本篇在之前的基础上,我们继续进行PhoneGap Android应用的开发,通过PhoneGap调用摄像头实现拍照自动上传的功能. 整体的学习思路大概是这样:index.ht

手机选取图片上传到服务器

初学安卓四个月不到的我,可能入门也算不上.边学边摸索,慢慢地能在百度上找到正确的能用的代码了,这应该就是我学这么久得到的进步了. 今天花了一天的时间,实现了上传头像和更改头像的功能.大部分的代码都是copy过来的,大概能看懂,知道怎么用,仅此! 好的,忙了一天,做个自我总结~ 在这里先总结上传头像功能的实现: 思路: 创建一个activity,简单的关联一个有imageView和button的布局.当点击imageView的时候,弹出一个dialog,该dialog可以调用系统的拍照.相册,这样

为office 365用户上传头像

方法一 使用outlook里面配置的office 365邮箱中的上传头像功能. 方法二 使用工具进行上传,注意此工具在中国大陆实际使用过程中,可能需要×××才能正常连接.CodeTwo User Photos for Office 365 - Thanks for download https://www.codetwo.com/freeware/user-photos-for-office-365-thanks 欢迎关注如下的微信公众号,获取更多IT资讯: 原文地址:http://blog.5