澳门正规赌博十大网站-澳门游戏网站
做最好的网站

上传文件并生成缩略图代码,flash实现Avatar头像上

if( isset($_FILES['upImg']) )
{
 if( $userGroup[$loginArr['group']]['upload'] == 0 )
 {
  echo '{"error":"您所在的用户组无权上传图片!"}';
 }
 else
 {
  $savePath = "attachment/img/".date('Y/m/d/H');

  mkDirs($savePath);

  $fileType = strtolower(strrchr($_FILES['upImg']['name'],"."));

  if ( !in_array($fileType, array(".jpg",".jpeg",".gif",".png")) )
  {
   echo '{"error":"目前仅支持格式为jpg、jpeg、gif、png的图片!"}';
  }
上传文件并生成缩略图代码,flash实现Avatar头像上传的程序。  elseif( $_FILES['upImg']['size'] > 204800 )
  {
   echo '{"error":"图片不能超过200K!"}';
  }
  else
上传文件并生成缩略图代码,flash实现Avatar头像上传的程序。  {
   $saveImg = $savePath."/".$loginArr['uid']."_".time().rand().$fileType;

   if( @move_uploaded_file($_FILES['upImg']['tmp_name'], $saveImg) )
   {
    echo '{"error":"","msg":"';
   }
   else
   {
    echo '{"error":"图片上传失败!"}';
   }
  }
 }
}

if( $loginArr['state'] == 0 )
{
 echo '{"error":"您还没有登录!"}';
}
else
{
 $avatarPath = "attachment/avatar/".($loginArr['uid']2)."/".($loginArr['uid']%7)."/".$loginArr['uid'];

 if( isset($_FILES[上传文件并生成缩略图代码,flash实现Avatar头像上传的程序。'upAvatar']) )
 {
  mkDirs($avatarPath);

  $fileType = strtolower(strrchr($_FILES['upAvatar']['name'],"."));

  if ( !in_array($fileType, array(".jpg",".jpeg",".gif",".png")) )
  {
   echo '{"error":"目前仅支持格式为jpg、jpeg、gif、png的图片!"}';
  }
  elseif( $_FILES['upAvatar']['size'] > 2097152 )
  {
   echo '{"error":"图片不能超过2MB!"}';
  }
  else
  {
   $imgInfo = @getimagesize($_FILES['upAvatar']['tmp_name']);

   if( !$imgInfo || !in_array($imgInfo[2], array(1,2,3)) )
   {
    echo '{"error":"系统无法识别您上传的文件!"}';
   }
   else
   {
    $TmpAvatar = $avatarPath."/temp".$fileType;
    
    if( @move_uploaded_file($_FILES['upAvatar']['tmp_name'], $TmpAvatar) )
    {
     $maxWidth = 520;

     $maxHeight = 520;

     if( $maxWidth > $imgInfo[0] || $maxHeight > $imgInfo[1] )
     {
      $maxWidth = $imgInfo[0];

      $maxHeight = $imgInfo[1];
     }
     else
     {
      if ( $imgInfo[0] < $imgInfo[1] )
       $maxWidth = ($maxHeight / $imgInfo[1]) * $imgInfo[0];
      else
       $maxHeight = ($maxWidth / $imgInfo[0]) * $imgInfo[1];
     }

     if( $maxWidth < 40 )
     {
      $maxWidth = 40;
     }

     if( $maxHeight < 40 )
     {
      $maxHeight = 40;
     }

     $image_p = imagecreatetruecolor($maxWidth, $maxHeight);

     switch($imgInfo[2])
     {
      case 1:
       $image = imagecreatefromgif($TmpAvatar);
       break;
      case 2:
       $image = imagecreatefromjpeg($TmpAvatar);
       break;
      case 3:
       $image = imagecreatefrompng($TmpAvatar);
       break;
     }

     imagecopyresampled($image_p, $image, 0, 0, 0, 0, $maxWidth, $maxHeight, $imgInfo[0], $imgInfo[1]);

     imagejpeg($image_p, $avatarPath."/temp.jpg",100);

     imagedestroy($image_p);

     imagedestroy($image);

     if( $fileType != ".jpg" && file_exists($TmpAvatar) )
     {
      unlink($TmpAvatar);
     }

     echo '{"error":"","url":"'.$avatarPath.'/temp.jpg?'.rand().'","width":"'.$maxWidth.'","height":"'.$maxHeight.'"}';
    }
    else
    {
     echo '{"error":"图片上传失败!"}';
    }
   }
  }
 }

 if( isset($_POST['x'],$_POST['y'],$_POST['w'],$_POST['h']) )
 {
  if( is_numeric($_POST['x']) && is_numeric($_POST['y']) && $_POST['w'] > 0 && $_POST['h'] > 0 )
  {
   $image_p = imagecreatetruecolor(40, 40);

   $image = imagecreatefromjpeg($avatarPath."/temp.jpg");

   imagecopyresampled($image_p, $image, 0, 0, $_POST['x'], $_POST['y'], 40, 40, $_POST['w'], $_POST['h']);

   imagejpeg($image_p, $avatarPath."/40_40.jpg",100);

   imagedestroy($image_p);

   imagedestroy($image);

   unlink($avatarPath."/temp.jpg");

   echo "1";
  }
 }

 if( isset($_POST['avatar']) && $_POST['avatar'] == "delete" )
 {
  if( file_exists($avatarPath."/temp.jpg") )
  {
   unlink($avatarPath."/temp.jpg");
  }
 }
}

ob_end_flush();

#tar xzvf facedetect-1.0.0.tar.gz
#cd facedetect-1.0.0
#phpize && ./configure && make && make install

  // 验证图片文件的正确性
  $biginfo    = @getimagesize($bigavatarfile);
  $middleinfo = @getimagesize($middleavatarfile);
  if ( !$biginfo || !$middleinfo || $biginfo[2] == 4 || $middleinfo[2] == 4 ) {
   file_exists($bigavatarfile) && unlink($bigavatarfile);
   file_exists($middleavatarfile) && unlink($middleavatarfile);
   $success = 0;
  }
  // 删除临时存储的图片
  $tmpPath = $this->tempPath."{$uid}.jpg";
  @unlink($tmpPath);
  //临时保存头像
  $con=mysql_connect('localhost','root','root');
  mysql_select_db('zenyue');
  mysql_query("set names utf8");
  $sql="update zen_user set `face`='".$uid."' where mid='".$this->mid."'";
  mysql_query($sql);
  return '<?xml version="1.0" ?><root><face success="' . $success . '"/></root>';
 }
 // 从客户端访问头像图片的 url
 public function getAvatarUrl( $uid, $size='middle' ){
  $ci = &get_instance();
  $user_info = $ci->session->userdata('user_info');
  return $this->viewPath."{$user_info['mid']}/{$uid}_{$size}.jpg";
 }
 // 处理 HTTP Request
 // 返回值:如果是可识别的 request,处理后返回 true;否则返回 false。
 public function processRequest(){
  // 从 input 参数里拆解出自定义参数
  $arr = array();
  parse_str( $_GET['input'], $arr );
  $uid = $arr['uid'];
  if ( $_GET['a'] == 'uploadavatar') {
   // 第一步:上传原始图片文件
   echo $this->uploadAvatar( $uid );
   return true;
  } else if ( $_GET['a'] == 'rectavatar') {
   // 第二步:上传分割后的三个图片数据流
   echo $this->rectAvatar( $uid );
   return true;
  }
  return false;
 }
 // 编辑页面中包含 camera.swf 的 HTML 代码
 public function renderHtml( $uid ){
  // 把需要回传的自定义参数都组装在 input 里
  $ci = &get_instance();
  $user_info = $ci->session->userdata('user_info');
  $input = urlencode("uid={$uid}&FSESSIONID=".session_id().'&mid='.$user_info['mid']);
  $baseUrl = '/public/zen/js/avatar/';
  $uc_api = urlencode( $this->urlPath.'avatar.php');
  $urlCameraFlash = "{$baseUrl}camera.swf?m=user&inajax=1&appid=1&ucapi={$uc_api}&input={$input}&uploadSize=2048";
  $urlCameraFlash = '<script src="'.$baseUrl.'common.js?B6k" type="text/javascript"></script><script type="text/javascript">document.write(AC_FL_RunContent("width","455","height","253","scale","exactfit","src","'.$urlCameraFlash.'","id","mycamera","name","mycamera","quality","high","bgcolor","#ffffff","wmode","transparent","menu","false","swLiveConnect","true","allowScriptAccess","always"));</script>';
  return $urlCameraFlash;
 }
}

使用测试

 // 第二步:上传分割后的三个图片数据流
 private function rectAvatar( $uid ){
  // 从 $_POST 中提取出三个图片数据流
  $bigavatar    = $this->flashdata_decode( $_POST['avatar1'] );
  $middleavatar = $this->flashdata_decode( $_POST['avatar2'] );
  if ( !$bigavatar || !$middleavatar) {
   return '<root><message type="error" value="-2" /></root>';
  }
  
  //不存在目录,则创建
  if(!file_exists($this->savePath)){
   @mkdir($this->savePath,0777, true );
  }

 

视图中的调用方法

if(is_array($arr1)) {
$all = array_merge($arr,$arr1);
} else {
$all = $arr;
}
$allowtype = 1;
switch($_FILES['pic']['type']){
case ‘image/pjpeg’: $fix_pic.= “.jpg”; break;
case ‘image/jpeg’: $fix_pic.= “.jpg”; break;
case ‘image/x-png’: $fix_pic.= “.png”; break;
case ‘image/png’: $fix_pic.= “.png”; break;
default: $allowtype = 0; break;
}

<?php
class avatar{
 public $savePath;
 public $tempPath;
 public $viewPath;
 public $urlPath;
 public $mid;
 public function __construct($savePath,$tempPath,$viewPath,$urlPath,$mid){
  $this->savePath=$savePath;
  $this->tempPath=$tempPath;
  $this->viewPath=';
  $this->urlPath=';
  $this->mid = $mid;

imagick 扩展需要安装 ImageMagick 和 imagick 扩展,请参考:

  $success = 1;
  $fp = @fopen($bigavatarfile, 'wb');
  @fwrite($fp, $bigavatar);
  @fclose($fp);

libjpeg

下面再来补充一下avatar.class.php了

1.安装
从源代码编译成一个动态的so文件。

 }
 // 第一步:上传原始图片文件
 private function uploadAvatar($uid){
  // 检查上传文件的有效性
  if(empty($_FILES['Filedata'])){
   return -3; // No photograph be upload!
  }
  // 本地临时存储位置
  $tmpPath = $this->tempPath."{$uid}.jpg";
  // 如果临时存储的文件夹不存在,先创建它
  $dir=dirname($tmpPath);
  if(!file_exists($dir)){
   @mkdir($dir,0777, true );
  }
  // 如果同名的临时文件已经存在,先删除它
  if(file_exists($tmpPath)){
   @unlink($tmpPath);
  }
  // 把上传的图片文件保存到预定位置
  if ( @copy($_FILES['Filedata']['tmp_name'], $tmpPath) || @move_uploaded_file($_FILES['Filedata']['tmp_name'], $tmpPath)) {
   @unlink($_FILES['Filedata']['tmp_name']);
   list($width, $height, $type, $attr) = getimagesize($tmpPath);
   if ( $width < 10 || $height < 10 || $width > 3000 || $height > 3000 || $type == 4 ) {
    @unlink($tmpPath);
    return -2; // Invalid photograph!
   }
  } else {
   @unlink($_FILES['Filedata']['tmp_name']);
   return -4; // Can not write to the data/tmp folder!
  }

 

//重新设置session(防止新传头像无法显示)
$this->session->set_userdata('user_info',$user_info);
 
//项目决对路径
$base_path = rtrim(str_replace('\\','/', FCPATH),'/');
 
require APPPATH.'libraries/avatar.class.php';
 
$au = new avatar($base_path.'/uploads/user/'.$user_info['mid'].'/',$base_path.'/uploads/user/temp/','/uploads/user/','/faceapi/');
if(!$user_info['face']){
    $uid = 'uface_'.$user_info['mid'];
}else{
    $uid = $user_info['face'];
}
 
$this->data['urlAvatarBig']   = $user_info['face'] ? $au->getAvatarUrl($uid,'big') : (($this->user_info['sex']==0 )? static_url().'/uploads/user/dfgirl.png' : static_url().'/uploads/user/dfboy.png' );
$this->data['urlCameraFlash'] = $au->renderHtml($uid);
$this->data['uid'] = $uid;//头像标示
$this->load->view('center/member/edit_face',$this->data);

2.函数使用
在phpinfo()里检查是否有facedetect这个模块。
从openCV源代码/data/haarcascades/里头取出所有xml文件放在php的执行目录下

 代码如下

//检查有多少个脸型
var_dump(face_count('party.jpeg', haarcascade_frontalface_alt.xml'));
//返回脸型在图片中的位置参数,多个则返回数组
$arr = face_detect('party.jpeg', haarcascade_frontalface_alt2.xml');
print_r($arr);

  // 保存为图片文件
  $bigavatarfile    = $this->savePath."{$uid}_big.jpg";
  $middleavatarfile = $this->savePath."{$uid}_middle.jpg";

提示: 不要指定安装路径,否则后面编译facedetect会找不到OpenCV的路径。

然后在控制器中调用即可:实现方法

图片 1 图片 2 图片 3 图片 4

 代码如下

本文所介绍的技术不是原创,而是从一个叫Robert Eisele的德国人那里学习来的。他写了一个PHP扩展openCV,只封装了两个函数,叫face_detect和face_count。 openCV是一个开源的用C/C 开发的计算机图形图像库,非常强大,研究资料很齐全。本文重点是介绍如何使用php来调用其中的局部的功能。人脸侦查技术只是openCV一个应用分支。

  // 用于访问临时图片文件的 url
  $tmpUrl =$this->viewPath."temp/{$uid}.jpg";
  return $tmpUrl;
 }
 private function flashdata_decode($s) {
  $r = '';
  $l = strlen($s);
  for($i=0; $i<$l; $i=$i 2) {
   $k1 = ord($s[$i]) - 48;
   $k1 -= $k1 > 9 ? 7 : 0;
   $k2 = ord($s[$i 1]) - 48;
   $k2 -= $k2 > 9 ? 7 : 0;
   $r .= chr($k1 << 4 | $k2);
  }
  return $r;
 }

imagick扩展下载:  

<div style="float:left;width:455px;height:253px;overflow:hidden;margin-left:10px;"><?php echo $urlCameraFlash ?></div>
 
<script type="text/javascript">
function updateavatar(){
    $('#userface').attr('src','/uploads/user/<?php echo $user_info['mid'].'/'.$uid?>_big.jpg?aid=' Math.random());
}
</script>

libtiff

 代码如下

图片 5

  $fp = @fopen($middleavatarfile, 'wb');
  @fwrite($fp, $middleavatar);
  @fclose($fp);

$arr = face_detect($img, ‘haarcascade_frontalface_alt2.xml’);

#vi /usr/local/php/etc/php.ini
// 增加extension=facedetect.so

图片 6

本文由澳门正规赌博十大网站发布于澳门游戏网站,转载请注明出处:上传文件并生成缩略图代码,flash实现Avatar头像上