当前位置:首页 > PHP教程 > php图像处理 > 列表

PHP 图片合成、仿微信群头像的方法示例

发布:smiling 来源: PHP粉丝网  添加日期:2022-01-18 10:14:38 浏览: 评论:0 

本文实例讲述了PHP 图片合成、仿微信群头像的方法,分享给大家供大家参考,具体如下:

示例代码:

  1. /** 
  2.  * 合成图片 
  3.  * @param array  $pic_list [图片列表数组] 
  4.  * @param boolean $is_save  [是否保存,true保存,false输出到浏览器] 
  5.  * @param string $save_path [保存路径] 
  6.  * @return boolean|string 
  7.  */ 
  8. function getGroupAvatar($pic_list=array(),$is_save=false,$save_path=''){ 
  9.   //验证参数 
  10.   if(emptyempty($pic_list) || emptyempty($save_path)){ 
  11.     return false; 
  12.   } 
  13.   if($is_save){ 
  14.     //如果需要保存,需要传保存地址 
  15.     if(emptyempty($save_path)){ 
  16.       return false; 
  17.     } 
  18.   } 
  19.   // 只操作前9个图片 
  20.   $pic_list = array_slice($pic_list, 0, 9); 
  21.   //设置背景图片宽高 
  22.   $bg_w = 150; // 背景图片宽度 
  23.   $bg_h = 150; // 背景图片高度 
  24.   //新建一个真彩色图像作为背景 
  25.   $background = imagecreatetruecolor($bg_w,$bg_h); 
  26.   //为真彩色画布创建白灰色背景,再设置为透明 
  27.   $color = imagecolorallocate($background, 202, 201, 201); 
  28.   imagefill($background, 0, 0, $color); 
  29.   imageColorTransparent($background$color); 
  30.   //根据图片个数设置图片位置 
  31.   $pic_count = count($pic_list); 
  32.   $lineArr = array();//需要换行的位置 
  33.   $space_x = 3; 
  34.   $space_y = 3; 
  35.   $line_x = 0; 
  36.   switch($pic_count) { 
  37.     case 1: // 正中间 
  38.       $start_x = intval($bg_w/4); // 开始位置X 
  39.       $start_y = intval($bg_h/4); // 开始位置Y 
  40.       $pic_w = intval($bg_w/2); // 宽度 
  41.       $pic_h = intval($bg_h/2); // 高度 
  42.       break
  43.     case 2: // 中间位置并排 
  44.       $start_x = 2; 
  45.       $start_y = intval($bg_h/4) + 3; 
  46.       $pic_w = intval($bg_w/2) - 5; 
  47.       $pic_h = intval($bg_h/2) - 5; 
  48.       $space_x = 5; 
  49.       break
  50.     case 3: 
  51.       $start_x = 40; // 开始位置X 
  52.       $start_y = 5; // 开始位置Y 
  53.       $pic_w = intval($bg_w/2) - 5; // 宽度 
  54.       $pic_h = intval($bg_h/2) - 5; // 高度 
  55.       $lineArr = array(2); 
  56.       $line_x = 4; 
  57.       break
  58.     case 4: 
  59.       $start_x = 4; // 开始位置X 
  60.       $start_y = 5; // 开始位置Y 
  61.       $pic_w = intval($bg_w/2) - 5; // 宽度 
  62.       $pic_h = intval($bg_h/2) - 5; // 高度 
  63.       $lineArr = array(3); 
  64.       $line_x = 4; 
  65.       break
  66.     case 5: 
  67.       $start_x = 30; // 开始位置X 
  68.       $start_y = 30; // 开始位置Y 
  69.       $pic_w = intval($bg_w/3) - 5; // 宽度 
  70.       $pic_h = intval($bg_h/3) - 5; // 高度 
  71.       $lineArr = array(3); 
  72.       $line_x = 5; 
  73.       break
  74.     case 6: 
  75.       $start_x = 5; // 开始位置X 
  76.       $start_y = 30; // 开始位置Y 
  77.       $pic_w = intval($bg_w/3) - 5; // 宽度 
  78.       $pic_h = intval($bg_h/3) - 5; // 高度 
  79.       $lineArr = array(4); 
  80.       $line_x = 5; 
  81.       break
  82.     case 7: 
  83.       $start_x = 53; // 开始位置X 
  84.       $start_y = 5; // 开始位置Y 
  85.       $pic_w = intval($bg_w/3) - 5; // 宽度 
  86.       $pic_h = intval($bg_h/3) - 5; // 高度 
  87.       $lineArr = array(2,5); 
  88.       $line_x = 5; 
  89.       break
  90.     case 8: 
  91.       $start_x = 30; // 开始位置X 
  92.       $start_y = 5; // 开始位置Y 
  93.       $pic_w = intval($bg_w/3) - 5; // 宽度 
  94.       $pic_h = intval($bg_h/3) - 5; // 高度 
  95.       $lineArr = array(3,6); 
  96.       $line_x = 5; 
  97.       break
  98.     case 9: 
  99.       $start_x = 5; // 开始位置X 
  100.       $start_y = 5; // 开始位置Y 
  101.       $pic_w = intval($bg_w/3) - 5; // 宽度 
  102.       $pic_h = intval($bg_h/3) - 5; // 高度 
  103.       $lineArr = array(4,7); 
  104.       $line_x = 5; 
  105.       break
  106.   } 
  107.   foreach$pic_list as $k=>$pic_path ) { 
  108.     $kk = $k + 1; 
  109.     if ( in_array($kk$lineArr) ) { 
  110.       $start_x = $line_x
  111.       $start_y = $start_y + $pic_h + $space_y
  112.     } 
  113.     //获取图片文件扩展类型和mime类型,判断是否是正常图片文件 
  114.     //非正常图片文件,相应位置空着,跳过处理 
  115.     $image_mime_info = @getimagesize($pic_path); 
  116.     if($image_mime_info && !emptyempty($image_mime_info['mime'])){ 
  117.       $mime_arr = explode('/',$image_mime_info['mime']); 
  118.       if(is_array($mime_arr) && $mime_arr[0] == 'image' && !emptyempty($mime_arr[1])){ 
  119.         switch($mime_arr[1]) { 
  120.           case 'jpg'
  121.           case 'jpeg'
  122.             $imagecreatefromjpeg = 'imagecreatefromjpeg'
  123.             break
  124.           case 'png'
  125.             $imagecreatefromjpeg = 'imagecreatefrompng'
  126.             break
  127.           case 'gif'
  128.           default
  129.             $imagecreatefromjpeg = 'imagecreatefromstring'
  130.             $pic_path = file_get_contents($pic_path); 
  131.             break
  132.         } 
  133.         //创建一个新图像 
  134.         $resource = $imagecreatefromjpeg($pic_path); 
  135.         //将图像中的一块矩形区域拷贝到另一个背景图像中 
  136.         // $start_x,$start_y 放置在背景中的起始位置 
  137.         // 0,0 裁剪的源头像的起点位置 
  138.         // $pic_w,$pic_h copy后的高度和宽度 
  139.         imagecopyresized($background,$resource,$start_x,$start_y,0,0,$pic_w,$pic_h,imagesx($resource),imagesy($resource)); 
  140.       } 
  141.     } 
  142.     // 最后两个参数为原始图片宽度和高度,倒数两个参数为copy时的图片宽度和高度 
  143.     $start_x = $start_x + $pic_w + $space_x
  144.   } 
  145.   if($is_save){ 
  146.     $dir = pathinfo($save_path,PATHINFO_DIRNAME); 
  147.     if(!is_dir($dir)){ 
  148.       $file_create_res = mkdir($dir,0777,true); 
  149.       if(!$file_create_res){ 
  150.         return false;//没有创建成功 
  151.       } 
  152.     } 
  153.     $res = imagejpeg($background,$save_path); 
  154.     imagedestroy($background); 
  155.     if($res){ 
  156.       return true; 
  157.     }else
  158.       return false; 
  159.     } 
  160.   }else
  161.     //直接输出 
  162.     header("Content-type: image/jpg"); 
  163.     imagejpeg($background); 
  164.     imagedestroy($background); 
  165.   } 

调用示例:

  1. $img = array
  2.   'http://localhost/1.png'
  3.   'http://localhost/2.png'
  4.   'http://localhost/3.png'
  5.   'http://localhost/4.png'
  6.   'http://localhost/5.png'
  7.   'http://localhost/6.png'
  8.   'http://localhost/7.png'
  9.   'http://localhost/8.png'
  10.   'http://localhost/9.png'
  11.   'http://localhost/10.png'
  12. ); 
  13. $a = getGroupAvatar($img,1,'./img/123.jpg'); 
  14. var_dump($a);

Tags: PHP图片合成 PHP微信群头像

分享到: